なるほど。
「あるint型の数値を渡すとfizz, buzz, fizzbuzz, 数値の文字列のいずれかを返す関数」のテストをJUnit4で書いてみた。
package net.nkzn.fizzbuzz; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import org.junit.Test; public class FizzBuzzTest { @Test public void testFizzBuzz() { for(int i=0; i < 1000000; i++) { String value = FizzBuzz.eval(i); if (i % 3 == 0 && i % 5 == 0) { assertThat(value, is("fizzbuzz")); } else if (i % 3 == 0) { assertThat(value, is("fizz")); } else if (i % 5 == 0) { assertThat(value, is("buzz")); } else { assertThat(value, is(String.valueOf(i))); } } } }
どうせなのでワンライナー実装もしてみたけど上手くできなかった・・・。
package net.nkzn.fizzbuzz; public class FizzBuzz { public static String eval(int n) { return ""+((n%3==0)?"fizz"+((n%5==0)?"buzz":""):(n%5==0)?"buzz":n); } }
感想
- テストと実装を両方とも自分でやると条件判定を二種類考えないといけなくてダルいので、人にやらせる場合はテストだけ書かせれば充分やな感ある
- 事実上テストと実装で同じ条件判定してるので、このテストでFizzBuzzの正しさを証明できているかというと割と自信ない(;´Д`)