コピペでテスト書いてませんか
よくあるのが、入力を変えると、結果が変わるというテスト。
元コード
function testFunc($data) { .... }
テストコード
function testFunc_いろいろ返ってくる() { $data = true; $expected = [1,2,3], ..... $this->assertSame($expected, $result); } function testFunc_空っぽ() { $data = false; $expected = [], ..... $this->assertSame($expected, $result); } 他コピペでdataとexpectedを変えていく・・・
こういうのもったいない。
入力と結果を関数で渡すdataProvider
こんなときに、$dataや$expectedを関数で渡してみよう
/** * @test * @dataProvider testDataProvider */ function testFunc($data, $expected) { ..... $this->assertSame($expected, $result); } function testDataProvider() { return [ 'いろいろ返ってくる' => [ 'data' => true, 'expected' => [1,2,3] ], '空っぽ' => [ 'data' => false, 'expected' => [] ] ]; }
何してるの?
テストのコメント欄に、 @dataProvider
と関数名を書くと、
引数に値を入れることが出来る。
testDataProviderで配列を渡してやると、それをいい感じにテストしてくれる。
この場合、dataがtrueのときと、falseのときのテストが動く。
それぞれexpectedには、対応するdataが使われるので、見やすい!そしてコピペいらず!
ちなみに、キーに'空っぽ'とか日本語入れてますが、エラーが出たら、このキー名が表示されます。
めっちゃわかりやすい・・・!
参考になりそうなコード
クリックしたら、該当のコードに移ります。
ぜひdataProvider使って、コピペ減らして見やすいテストコードを!