2017-03-12 101 views
0

我實際上試圖瞭解PHPUNIT和使用PHP進行單元測試。PHPUnit測試異常和AssertEquals

我有一個經典的劃分方法。

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) 
    ); 
} 

正如你所看到的,有一個DataProvider有多個測試值。 問題是我必須排除/斷言異常這是做到這一點的最佳方式?

我應該在我的testDivide代碼中使用@exceptException並使用try catch嗎? 感謝您的幫助 祝您有美好的一天!

回答

1

用於測試PHPUnit異常的best practice是在測試方法的代碼中使用expectException()

+0

準確地說,我使用了@ExpectException註釋,但我需要一個testMethod,我可以在AssertEquals中使用2個不會拋出異常的值。並且1斷言會拋出一個異常......那麼,是否有可能在相同的測試方法中聲明和斷言?或者我應該把它們分開...... – Joe

+0

我建議使用'expectException()'方法,而不是'@ expectedException'註釋。 –