迷惘的码农。
分类:
2008-04-07 09:35:44
当你为现存代码编写测试时,你不得再三地编写类似
public function testMethod()
{
}
一样的相同的代码片断。PHPUnit能通过分析现存的类代码并为它生成一个测试用例类的框架来提供帮助。
范例 18.1: 计算器类
class Calculator
{
public function add($a, $b)
{
return $a + $b;
}
}
?>
下面的例子显示如何为名为Calculator
(见范例 18.1)的类生成测试类框架。
phpunit --skeleton Calculator
PHPUnit 3.2.10 by Sebastian Bergmann.
Wrote test class skeleton for Calculator to CalculatorTest.php.
对于原始类中的每个方法,在生成的测试用例类中会对应地存在一个未实现的测试用例(见)。
下面是运行生成的测试用例类的输出。
phpunit --verbose CalculatorTest
PHPUnit 3.2.10 by Sebastian Bergmann.
CalculatorTest
I
Time: 0 seconds
There was 1 incomplete test:
1) testAdd(CalculatorTest)
This test has not been implemented yet.
/home/sb/CalculatorTest.php:54
OK, but incomplete or skipped tests!
Tests: 1, Incomplete: 1.
你可在方法的文档块中使用@assert
注解自动地生成简单却有意义的测试来代替未完成的测试用例。范例 18.2显示一个例子。
范例 18.2: 带@assert注解的计算器类
class Calculator
{
/**
* @assert (0, 0) == 0
* @assert (0, 1) == 1
* @assert (1, 0) == 1
* @assert (1, 1) == 2
*/
public function add($a, $b)
{
return $a + $b;
}
}
?>
原始类中的每个方法都进行@assert
注解的检测。这些被转变为测试代码,像这样
/**
* Generated from @assert (0, 0) == 0.
*/
public function testAdd() {
$o = new Calculator;
$this->assertEquals(0, $o->add(0, 0));
}
下面是运行生成的测试用例类的输出。
phpunit CalculatorTest
PHPUnit 3.2.10 by Sebastian Bergmann.
....
Time: 0 seconds
OK (4 tests)
显示受支持的@assert
注解的各种变体以及它们被如何转变为测试代码。
表 18.1 受支持的@assert注解的各种变体
注解 | 转变为 |
---|---|
@assert (...) == X | assertEquals(X, method(...)) |
@assert (...) != X | assertNotEquals(X, method(...)) |
@assert (...) === X | assertSame(X, method(...)) |
@assert (...) !== X | assertNotSame(X, method(...)) |
@assert (...) > X | assertGreaterThan(X, method(...)) |
@assert (...) >= X | assertGreaterThanOrEqual(X, method(...)) |
@assert (...) < X | assertLessThan(X, method(...)) |
@assert (...) <= X | assertLessThanOrEqual(X, method(...)) |
@assert (...) throws X | @expectedException X |