【发布时间】:2011-01-26 04:07:23
【问题描述】:
我有一个关于配置类的简单单元测试用例(广泛的问题here),它通过设计触发类型不匹配和未定义配置设置的 PHP 错误。除错误外,方法退出返回false。
在我的测试用例中,我希望有一些测试失败。麻烦的是,我不能对返回值做一个简单的“断言”:运行测试期间抛出的每个错误都将转换为PHPUnit_Framework_Error 异常。
现在我可以让 PHPUnit 意识到我期待一个错误:
/**
* @expectedException PHPUnit_Framework_Error
*/
public function testSetInvalidKey()
{
$this->assertEquals(true, conf::set("invalid_key", "12345"));
}
这很好用,但我不明白的是,该函数中的任何其他断言都将不被评估。不管它是否会失败,PHPUnit 似乎只 等待异常发生,并在它发生时对整个函数感到满意。
也就是说,这个测试运行正常:
/**
* @expectedException PHPUnit_Framework_Error
*/
public function testSetInvalidKey()
{
// The error will be triggered here
$this->assertEquals(true, conf::set("invalid_key", "12345"));
$this->assertEquals(12345, 67810); // Huh?
$this->assertEquals("abc", "def"); // Huh?
$this->assertEquals(true, false); // Huh?
}
为什么?这是预期的行为吗?
我知道您只是将断言分成不同的函数,但我想了解其行为。
【问题讨论】:
-
您所描述的行为是预期的。就像抛出异常会停止被测类的执行一样,抛出异常会停止测试的执行(直到异常被捕获和处理)。
标签: php unit-testing tdd phpunit