根据PHPUnit Documentation on @expectedExceptionMessage
,该字符串只能是实际Exception
抛出的子字符串。
在我的一种验证方法中,每个发生的错误都会推送一个数组项,并Exception
通过内爆错误数组来显示最终消息。
class MyClass
{
public function validate($a, $b, $c, $d)
{
if($a < $b) $errors[] = "a < b.";
if($b < $c) $errors[] = "b < c.";
if($c < $d) $errors[] = "c < d.";
if(count($errors) > 0) throw new \Exception(trim(implode(" ", $errors)));
}
}
我在这里遇到的问题是,在 PHPUnit 测试方法中,我检查了不同的组合。这会导致我打算失败的测试通过。
/**
* @expectedException \Exception
* @expectedExceptionMessage a < b.
*/
public function testValues_ALessBOnly()
{
$myClass = new MyClass()
$myClass->validate(1, 2, 4, 3);
}
消息的字符串Exception
实际上是"a < b. b < c."
,但这个测试仍然通过。我打算让这个测试失败,因为这个消息不是我所期望的。
PHPUnit 有没有办法期望一个确切的字符串,而不是一个子字符串?我希望避免以下情况:
public function testValues_ALessBOnly()
{
$myClass = new MyClass()
$fail = FALSE;
try
{
$myClass->validate(1, 2, 4, 3);
}
catch(\Exception $e)
{
$fail = TRUE;
$this->assertEquals($e->getMessage(), "a < b.";
}
if(!$fail) $this->fail("No Exceptions were thrown.");
}