如何在PHPUnit中测试异常*处理*?

时间:2017-02-01 21:53:28

标签: php unit-testing exception-handling phpunit

我看到很多关于如何使用PHPUnit来测试方法是否抛出异常的答案 - 这非常棒。

对于这段代码,我了解@expectsException将允许我测试try {}块和thing1()。如何测试thing2()thing3()位?

try {
 thing1();
}
catch (Exception $e) {
 thing2();
 thing3();
}

这是我现在失败的原因:

function myTest() {
    $prophecy = $this->prophesize(Exception::CLASS);
    $my_exception = $prophecy->reveal();

    // more testing stuff
    ... 
}

PHPUnit将reveal()调用视为意外异常,并在&#34之前退出;更多测试内容"。

1 个答案:

答案 0 :(得分:2)

The annotation expectedException用于声明,该测试将已完成,并带有未处理的异常。

在您的情况下,由于 Ancy C 注意到,thing1()必须抛出任何异常,然后thing2()thing3()将被调用,您可以测试它们。

修改

你必须在某个地方出错。这对我来说很完美

<?php

class Stack
{
    public function testMe()
    {
        try {
            $this->thing1();
        } catch (Exception $e) {
            return $this->thing2();
        }
    }

    private function thing1()
    {
        throw new Exception();
    }

    private function thing2()
    {
        return 2;
    }
}

测试班:

class StackTest extends TestCase
{
    public function test()
    {
        $stack = new Stack();
        $result = $stack->testMe();

        self::assertEquals(2, $result);
    }
}

结果:

PHPUnit 5.5.4 by Sebastian Bergmann and contributors.

.                                                                   1 / 1 (100%)

Time: 20 ms, Memory: 4.00MB

OK (1 test, 1 assertion)