2017-03-12 17 views
0

私はPHPでPHPUNITとユニットテストを実際に理解しようとしています。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があります。 問題は、それを行う最善の方法であるExcept/Assert Exceptionを必要としていることです。

@exceptExceptionを使用し、testDivideコードでtry catchを使用する必要がありますか? あなたの助けをありがとう 良い一日を!

答えて

1

PHPUnitで例外をテストするためのbest practiceは、テストメソッドのコードでexpectException()を使用します。

+0

私は@ExpectExceptionアノテーションを使用しましたが、例外をスローしない2つの値に対してAssertEqualsを使用できるtestMethodが必要です。そして1つは例外をスローすると主張します...それで、同じテストメソッドでassertequalsと "assert"することは可能ですか?または私はそれらを駆除する必要があります... – Joe

+0

'@ expectedException'アノテーションではなく' expectException() 'メソッドを使用することを提案しました。 –

関連する問題