测试PHPUnit以测试“__construct()必须是..的实例”不能识别异常

时间:2015-01-27 17:40:18

标签: php phpunit

我有以下代码来测试类构造函数是否会触发异常但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');

2 个答案:

答案 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():
}