测试 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():
}