PHPUnit测试异常和AssertEquals
我实际上是在试图理解PHPUNIT和PHP的单元测试 我有一个经典的除法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
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目前如何工作是不可取的,我建议用两种不同的方法测试断言和异常。