PHPUnit测试异常和AssertEquals

时间:2017-03-12 14:42:17

标签: php unit-testing testing phpunit

我实际上是想用PHP理解PHPUNIT和单元测试。

我有一个经典的划分方法。

 public function divide($firstNumber, $secondNumber){
    if( !is_numeric($firstNumber) ||  !is_numeric($secondNumber) ){
        throw new Exception("Not a number") ; 
    }
    if(  $secondNumber == 0 ) throw new Exception("Can't divide by zero") ; 

    return $firstNumber/$secondNumber ; 
}

如您所见,它可以返回Number或Exception。 这是我使用的testDivide代码。

 /**
 * @dataProvider diviserDateProvider
 * @covers MyTools::diviser     
 */
public function testDivide($firstNumber, $secondNumber, $expected) {
    $myToolsClasse = new MyTools();
    $this->assertEquals($expected, $myToolsClasse->diviser($firstNumber, $secondNumber));



}

public function diviserDateProvider() {
    return array(
        array(1, 0, new Exception("Can't divide by zero")),
        array(1, 2, 0.5),
        array("", "", 0.5)
    );
}

正如您所看到的,DataProvider具有多个测试值。 问题是我必须除外/断言一个异常,这是最好的方法吗?

我应该使用@exceptException并在testDivide代码中使用try catch吗? 谢谢你的帮助 祝你今天愉快!

2 个答案:

答案 0 :(得分:3)

使用PHPUnit测试异常的best practice是在测试方法的代码中使用expectException()

答案 1 :(得分:0)

尝试一下

$this->expectException(\Exception::class);
$this->expectExceptionMessage('Expected Exception Message');

https://phpunit.de/manual/6.5/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit.exceptions.examples.ExceptionTest.php