我有以下代码来测试类构造函数是否会触发异常但PHPUnit测试失败。我想知道我做错了什么。
/** @test */
public function should_require_instance_of_uuid()
{
$this->setExpectedException('Exception');
$id = new BusinessPartnerId;
}
PHPunit给出以下错误: 有1个错误: 1)测试\ Domain \ Model \ Common \ BusinessPartner \ BusinessPartnerIdTest :: should_require_instance_of_uuid 传递给Domain \ Model \ Common \ BusinessPartner \ BusinessPartnerId :: __ construct()的参数1必须是Rhumsaa \ Uuid \ Uuid的实例,没有给出,在第14行的tests / Comain / Model / Common / BusinessPartner / BusinesPartnerIdTest.php中调用和定义
域/型号/普通/业务伙伴/ BusinessPartnerId.php:20 测试/域/型号/通用/业务伙伴/ BusinesPartnerIdTest.php:14
我不确定为什么这个测试没有通过?我也尝试过:
$this->setExpectedException('InvalidArgumentException');
答案 0 :(得分:2)
你应该看看:
如果你有课程:
class Stack
{
public function __construct(\Model $model)
{
}
}
然后测试:
/**
* @test
*/
public function shouldCheckInstance()
{
try {
new Stack(null);
} catch(\Exception $e) {
$this->assertContains('must be an instance of Model', $e->getMessage());
}
}
答案 1 :(得分:1)
虽然我没有使用当前的PHPUnit,但旧版本不允许您捕获基本的Exception,但会捕获您自己的Exception类扩展。此外,异常可能是命名空间,因此它是\ Exception,而不仅仅是Exception。
我还在doc块中使用@expectedException来指示我期待的异常。
/**
* @test
* @expectedException \MyNamespace\MyException
*/
public function shouldCheckInstance()
{
new MyClass():
}
或
/**
* @test
*/
public function shouldCheckInstance()
{
$this->setExpectedException('\MyNamespace\MyException');
new MyClass():
}