テス・・・ト・・・?
友人の研究室で強制されているらしいテストが面白かった。(ネタとして)*1
例えば、こんな感じのクラスがあったとする。
public class Hoge { private String hoge; public Hoge(String hoge) { this.hoge = hoge; } public String getHoge() { return hoge; } public void setHoge(String hoge) { this.hoge = hoge; } }
この程度のクラスなら、まぁテストするほどのもんでも無いが、作るならこんな感じだろう。
@Test public void testHoge() { Hoge hoge = new Hoge("a"); assertEquals("a", hoge.getHoge()); hoge.setHoge("b"); assertEquals("b", hoge.getHoge()); }
だが、友人が作らされているものはこんなんじゃなかった・・・
@Test public void testConstructor1() throws Exception { Hoge hoge = new Hoge("a"); Field field = hoge.getClass().getDeclaredField("hoge"); field.setAccessible(true); assertEquals("a", field.get(hoge)); } @Test public void testGetHoge1() throws Exception { Hoge hoge = new Hoge("a"); Field field = hoge.getClass().getDeclaredField("hoge"); field.setAccessible(true); assertEquals(field.get(hoge), hoge.getHoge()); } @Test public void testSetHoge1() throws Exception { Hoge hoge = new Hoge("a"); hoge.setHoge("b"); Field field = hoge.getClass().getDeclaredField("hoge"); field.setAccessible(true); assertEquals("b", field.get(hoge)); }
見ろ!! privateフィールドがゴミのようだ!!
他にも、1つのテスト中にassertは1つだけだとか、
テストメソッド名にテスト仕様書に対応した番号を付けろだとか、*2
なんか凄いことになっているらしい・・・