PHPUnit测试异常和AssertEquals

PHPUnit测试异常和AssertEquals,php,unit-testing,testing,phpunit,Php,Unit Testing,Testing,Phpunit,我实际上是在试图理解PHPUNIT和PHP的单元测试 我有一个经典的除法 public function divide($firstNumber, $secondNumber){ if( !is_numeric($firstNumber) || !is_numeric($secondNumber) ){ throw new Exception("Not a number") ; } if( $secondNumber == 0 ) throw ne

我实际上是在试图理解PHPUNIT和PHP的单元测试

我有一个经典的除法

 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 ; 
}
正如您所看到的,它可以返回一个数字或异常。 下面是我使用的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)
    );
}
如您所见,有一个具有多个测试值的数据提供程序。 问题是我必须排除/断言一个异常,这是最好的方法

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

使用PHPUnit测试异常的方法是在测试方法的代码中使用expectException。

使用PHPUnit测试异常的方法是在测试方法的代码中使用expectException。

试试这个

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

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

确切地说,我使用了@ExpectException注释,但我需要一个testMethod,在这里我可以使用AssertEquals处理2个不会引发异常的值。1断言将引发异常。。。那么,是否有可能在同一测试方法中断言QUALS和assert?或者我应该对它们进行分析……我建议使用expectException方法,而不是@expectedException注释。@Joe您可以在同一测试中将它们放在一起,但当然您需要小心,记住它们的顺序很重要异常应该在断言之后抛出,因为它阻止方法继续执行。这在很大程度上取决于您正在测试的方面是什么,但是对于PHPUnit目前的工作方式是不可取的,我建议用两种不同的方法测试断言和异常。确切地说,我使用了@ExpectException注释,但我需要一种testMethod,我可以使用AssertEquals来测试2个不会引发异常的值。1断言将引发异常。。。那么,是否有可能在同一测试方法中断言QUALS和assert?或者我应该对它们进行分析……我建议使用expectException方法,而不是@expectedException注释。@Joe您可以在同一测试中将它们放在一起,但当然您需要小心,记住它们的顺序很重要异常应该在断言之后抛出,因为它阻止方法继续执行。这在很大程度上取决于您正在测试的方面是什么,但是对于PHPUnit目前如何工作是不可取的,我建议用两种不同的方法测试断言和异常。