我看到很多关于如何使用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之前退出;更多测试内容"。
答案 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)