はじめに
今回使用する環境は、下記になります。
- JUnit4
- Springboot
- eclipse
Enclosed.classの使い方
Enclosed.classは、JUnitのテストクラスにインナークラスを定義できるようになる機能です。
使用方法は下記のようになります。
@RunWith(Enclosed.class)
public class ApplicationTests {
/**
* 登録テスト
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class register_test{
@Test
public void case1() {
//ここにテストコードを記載する
}
}
}
クラスに@RunWith(Enclosed.class)のアノテーションをつけることでインナークラスで@Testがついたテストメソッドも認識をしてテストを行ってくれます。
Enclosed.classでできること
見た目上のメリットとしては、例として画面のテストでは、初期表示、登録ボタンといったイベントごとにクラスを分けて行うことでコードがわかりやすくなります。
機能的なメリットは、DBUnitなどや@Beforeなどの機能でイベントごとにデータを定義したい場合などは、下記のようにすることによって、分けることができます。
@RunWith(Enclosed.class)
public class ApplicationTests {
/**
* 登録テスト
*/
@RunWith(SpringRunner.class)
@SpringBootTest
@TestExecutionListeners({
DependencyInjectionTestExecutionListener.class,
DbUnitTestExecutionListener.class
})
@DatabaseSetup("register.xlsx")
public class register_test{
@Before
public void setup() {
//毎回テスト実行時に呼ばれる
}
@After
public void after() {
//毎回テスト実行時に呼ばれる
}
@Test
public void case1() {
//ここにテストコードを記載する
}
}
/**
* 初期表示テスト
*/
@RunWith(SpringRunner.class)
@SpringBootTest
@TestExecutionListeners({
DependencyInjectionTestExecutionListener.class,
DbUnitTestExecutionListener.class
})
@DatabaseSetup("init.xlsx")
public class init_test{
@Before
public void setup() {
//毎回テスト実行時に呼ばれる
}
@Test
public void case1() {
//ここにテストコードを記載する
}
}
}
もちろん@BeforeClassや@AfterClassなどもインナークラスで定義できるので定義したい処理を分ける場合にもとても役に立つ方法です。
まとめ
Enclosed.classを利用したテストクラスは、JUnitにおいてテストコードをより見やすくしたり、テストがイベントごとに定義されているような場合にはとても便利な機能です。
テストコードをわかりやすくするのは、実装後のメンテナンスにおいても大変重要になるため利用することをお勧めします。