测试 PHPUnit 以测试“__construct() 必须是 ..”的实例不识别异常
Testing PHPUnit to test a "__construct() must be an instance of .." does not recognize exception
我有以下代码来测试 class 构造函数是否会触发异常但 PHPUnit 测试失败。我想弄清楚我做错了什么。
/** @test */
public function should_require_instance_of_uuid()
{
$this->setExpectedException('Exception');
$id = new BusinessPartnerId;
}
PHPunit 给出以下错误:
有 1 个错误:
1) Tests\Domain\Model\Common\BusinessPartner\BusinessPartnerIdTest::should_require_instance_of_uuid
传递给 Domain\Model\Common\BusinessPartner\BusinessPartnerId::__construct() 的参数 1 必须是给定的 Rhumsaa\Uuid\Uuid、none 的实例,在 tests/Comain/Model/Common/BusinessPartner/BusinesPartnerIdTest.php 上调用第 14 行并定义
Domain/Model/Common/BusinessPartner/BusinessPartnerId.php:20
tests/Domain/Model/Common/BusinessPartner/BusinesPartnerIdTest.php:14
我不确定为什么这个测试没有通过?我也试过:
$this->setExpectedException('InvalidArgumentException');
你测试应该看起来:
如果你有 class:
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());
}
}
虽然我没有使用过当前的 PHPUnit,但旧版本不允许您捕获基本异常,但会捕获您自己的异常扩展 class。此外,异常可能是命名空间的,所以它是 \Exception,而不仅仅是 Exception。
我还在文档块中使用了@expectedException 来指示我期望的异常。
/**
* @test
* @expectedException \MyNamespace\MyException
*/
public function shouldCheckInstance()
{
new MyClass():
}
或
/**
* @test
*/
public function shouldCheckInstance()
{
$this->setExpectedException('\MyNamespace\MyException');
new MyClass():
}
我有以下代码来测试 class 构造函数是否会触发异常但 PHPUnit 测试失败。我想弄清楚我做错了什么。
/** @test */
public function should_require_instance_of_uuid()
{
$this->setExpectedException('Exception');
$id = new BusinessPartnerId;
}
PHPunit 给出以下错误: 有 1 个错误: 1) Tests\Domain\Model\Common\BusinessPartner\BusinessPartnerIdTest::should_require_instance_of_uuid 传递给 Domain\Model\Common\BusinessPartner\BusinessPartnerId::__construct() 的参数 1 必须是给定的 Rhumsaa\Uuid\Uuid、none 的实例,在 tests/Comain/Model/Common/BusinessPartner/BusinesPartnerIdTest.php 上调用第 14 行并定义
Domain/Model/Common/BusinessPartner/BusinessPartnerId.php:20 tests/Domain/Model/Common/BusinessPartner/BusinesPartnerIdTest.php:14
我不确定为什么这个测试没有通过?我也试过:
$this->setExpectedException('InvalidArgumentException');
你测试应该看起来:
如果你有 class:
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());
}
}
虽然我没有使用过当前的 PHPUnit,但旧版本不允许您捕获基本异常,但会捕获您自己的异常扩展 class。此外,异常可能是命名空间的,所以它是 \Exception,而不仅仅是 Exception。
我还在文档块中使用了@expectedException 来指示我期望的异常。
/**
* @test
* @expectedException \MyNamespace\MyException
*/
public function shouldCheckInstance()
{
new MyClass():
}
或
/**
* @test
*/
public function shouldCheckInstance()
{
$this->setExpectedException('\MyNamespace\MyException');
new MyClass():
}