@ledsun blog

無味の味は佳境に入らざればすなわち知れず

社内向けにパラメタライズドテストの話をしました

speakerdeck.com

自分がパラメタライズドテストの存在を知ったのは #TestingFrameworkMeeting に参加しました(1) - テスティングフレームワークの歴史 - @ledsun blog の頃だと思います。 読み返してみても一文字も出てこないので、記憶違いかもしれません。

仮に本当だとして2015年です。 それからずっとプログラマーやってますが、なんとなくパラメタライズドテストを書く機会は訪れませんでした。 最近、なぜか向こうからNUnitのテストコードがパラメタライズドテストを適用すると良い感じなりそうな形でやって来ました。

NUnitのテストコードをいじくり回して、なんとなくパラメタライズドテストの良さがわかってきました。 なんちゃらUnit系のテストっぽいテストコードを書くときに、うまくはまるようです。 境界値とか同値クラスとかでテスト用のパラメータの組み合わせ表を、そのままテストコードとして書けるのが良かったです。

RSpecでテストを書いている時は全然そんな気持ちになりません。 もっとシナリオというか、条件の階段をひとつずつ降りていくような気持ちです。 パラメータの組み合わせ表ってイメージは持ってないです。 なんとなく7年間パラメタライズドテストを書かなかった理由がわかった気がします。

NUnitのパラメタライズドテストの記法はめちゃくちゃ良いので、良いです。

[TestCase(0, ExpectedResult = "")]
[TestCase(1, ExpectedResult = "1")]
[TestCase(2, ExpectedResult = "2")]
[TestCase(3, ExpectedResult = "FIZZ")]
[TestCase(4, ExpectedResult = "4")]
[TestCase(5, ExpectedResult = "BUZZ")]
// 中略
[TestCase(14, ExpectedResult = "14")]
[TestCase(15, ExpectedResult = "FIZZBUZZ")]
[TestCase(16, ExpectedResult = "16")]
[TestCase(100, ExpectedResult = "BUZZ")]
[TestCase(101, ExpectedResult = "")]
public string FizzBuzzTest(int number)
{
    return FizzBuzz(number);
}

GitHub - ledsun/parameterized_test: パラメタライズドテスト比較用のリポジトリです。 に検証に使ったソースコードとプレゼンテーションの元データがあります。