Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

FizzBuzz 3 3

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

RSpecで 9 9

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

expect(fizzbuzz 3).to eq 'FIZZ' が、一杯でてくるのが気になる。 13 13

Slide 14

Slide 14 text

Don't repeat yourself 14 14

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

[ [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

Slide 17

Slide 17 text

パラメタライズドテストを サポートしている テスティングフレームワーク 17 17

Slide 18

Slide 18 text

NUnit 18 18

Slide 19

Slide 19 text

[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

Slide 20

Slide 20 text

自分でeachやブロックを書かなくてよい 誰が書いても同じ書き方になる テストコードが読みやすい 20 20

Slide 21

Slide 21 text

.NET の世界のから 21 21

Slide 22

Slide 22 text

自慢 情報共有 22 22