テストクラスは育ってくると、冗長になるというか、胴長な感じのクラスになる。
そうなると、テストの前提条件でグルーピングしたくなる。
JUnit4であれば、Enclosed テストランナーを使ってこのグルーピングが可能。
Java(JUnit4)だとこうなる。
@RunWith(Enclosed.class)
public class HogeDaoTest {
public static class データベースが空の場合 {
@Before
public void setUp() {
// データベースが空っぽの前提条件を満たす setUp を書く
}
@Test
public void findAllはゼロ件になる() {}
:
}
public static class データベースにレコード1件ある場合 {
@Before
public void setUp() {
// データベースにレコード1件の前提条件を満たす setUp を書く
}
@Test
public void findAllは1件取得できる() {}
:
}
}
そして実は、NUnitでも同様な事が可能だが、JUnitとはやり方が違うし、NUnitでのやり方はググっても見つからないから公開しとく。
上記のコードをVB.NETで起こすと、、、
Public MustInherit Class HogeDaoTest Public Class データベースが空の場合 : Inherits HogeDaoTest <SetUp()> Public Sub SetUp() ' データベースが空っぽの前提条件を満たす setUp を書く End Sub <Test()> Public Sub FindAllはゼロ件になる() End Sub : End Class Public Class データベースにレコード1件ある場合 : Inherits HogeDaoTest <SetUp()> Public Sub SetUp() ' データベースにレコード1件の前提条件を満たす setUp を書く End Sub <Test()> Public Sub FindAllは1件取得できる() End Sub : End Class End Classこんなふうに継承させると実現できる。簡単(だけど正規のやり方ではないかもしれない)。
TestDriven.NET等を使い、スーパークラスを「テスト実行」すれば、サブクラスすべてのテスト実行が可能だし、サブクラスだけ「テスト実行」ももちろん可能
ちなみに私は、各サブクラス共通のSetUp処理をスーパークラスに記述することをよくやる。
Public MustInherit Class HogeDaoTest <SetUp()> Public Overridable Sub SetUp() ' データベースが空っぽの前提条件 End Sub Public Class データベースが空の場合 : Inherits HogeDaoTest <Test()> Public Sub FindAllはゼロ件になる() End Sub : End Class Public Class データベースにレコード1件ある場合 : Inherits HogeDaoTest Public Overrides Sub SetUp() MyBase.SetUp() ' データベースにレコード1件 End Sub <Test()> Public Sub FindAllは1件取得できる() End Sub : End Class End Class
みんなの何かの糧になれば幸い。