Upgrade to Pro — share decks privately, control downloads, hide ads and more …

パラメタライズドテスト

 パラメタライズドテスト

社内向けにパラメタライズドテストを紹介したときの資料です。
おもにRubyist向けで、RSpecでのテストの書き方をわかっている人向けです。

4f8c3a1aedaf9aafd6c74ab077d9ad18?s=128

shigeru. nakajima

July 11, 2022
Tweet

More Decks by shigeru. nakajima

Other Decks in Programming

Transcript

  1. パラメタライズドテスト 2022/07/08 株式会社ラグザイア 中島 滋

  2. パラメタライズドテストとは? テストコードの書き方 名前がかっこいい 2 2

  3. FizzBuzz 3 3

  4. 1から100までの数に対して 3で割り切れる数はFIZZ 5で割り切れる数はBUZZ 3でも5でも割り切れる数はFIZZBUZZと表示する。 それ以外の数は数字のまま表示する。 4 4

  5. どんなテストをかきますか? 5 5

  6. まず 3、5、15は入力します。 他にはなにかいれますか? 6 6

  7. 3、5、15のまわりの数字はどうでしょうか? 2, 4, 6, 14, 16 ... 7 7

  8. 1から100までの数 以外はどうなるでしょう? 0、1と100、101 も確認したいです。 8 8

  9. RSpecで 9 9

  10. context '数が1より小さいとき' do it { expect(fizzbuzz 0).to eq '' }

    end context '数が100より大きいとき' do it { expect(fizzbuzz 101).to eq '' } end context '数が3で割り切れるとき' do it { expect(fizzbuzz 3).to eq 'FIZZ' } it { expect(fizzbuzz 6).to eq 'FIZZ' } it { expect(fizzbuzz 9).to eq 'FIZZ' } end 10 10
  11. context '数が5で割り切れるとき' do it { expect(fizzbuzz 5).to eq 'BUZZ' }

    it { expect(fizzbuzz 10).to eq 'BUZZ' } it { expect(fizzbuzz 20).to eq 'BUZZ' } end context '数が15で割り切れるとき' do it { expect(fizzbuzz 15).to eq 'FIZZBUZZ' } it { expect(fizzbuzz 30).to eq 'FIZZBUZZ' } it { expect(fizzbuzz 45).to eq 'FIZZBUZZ' } end 11 11
  12. context '数が3でも5でも割り切れないとき' do it { expect(fizzbuzz 1).to eq '1' }

    it { expect(fizzbuzz 2).to eq '2' } it { expect(fizzbuzz 4).to eq '4' } it { expect(fizzbuzz 7).to eq '7' } it { expect(fizzbuzz 8).to eq '8' } it { expect(fizzbuzz 11).to eq '11' } it { expect(fizzbuzz 13).to eq '13' } it { expect(fizzbuzz 14).to eq '14' } it { expect(fizzbuzz 16).to eq '16' } end 12 12
  13. expect(fizzbuzz 3).to eq 'FIZZ' が、一杯でてくるのが気になる。 13 13

  14. Don't repeat yourself 14 14

  15. アサーション(expect~)の重複を解消する パラメタライズドテスト 15 15

  16. [ [0, ''], [1, '1'], [2, '2'], [3, 'FIZZ'], [4,

    '4'], [5, 'BUZZ'], # 中略 [101, ''] ].each do | number, answer | it { expect(fizzbuzz number).to eq answer } end 配列で、入力値と期待する結果をまとめる expect(fizzbuzz number).to eq answer をひとつに 16 16
  17. パラメタライズドテストを サポートしている テスティングフレームワーク 17 17

  18. NUnit 18 18

  19. [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); } 属性でパラメーターと期待する値を指定 テストケースはひとつ 19 19
  20. 自分でeachやブロックを書かなくてよい 誰が書いても同じ書き方になる テストコードが読みやすい 20 20

  21. .NET の世界のから 21 21

  22. 自慢 情報共有 22 22