Spring統合junit実装ユニットテスト

2657 ワード

IoCコンテナ内のオブジェクトにアクセスして機能テストを行う場合、単純にjunitを使用してユニットテストを行う場合、私たちは一般的にこのようにすることができます.
public class AccountServiceTest {
    @Test
    public void transfer() {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(BeanConfig.class);
        AccountService accountService = (AccountService) context.getBean("accountService");
        accountService.transfer(1, 2, 100);
    }
}

あるいはもっと良い方法:
public class AccountServiceTest {
    private AccountService accountService;

    @Before
    public void init(){
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(BeanConfig.class);
        accountService = (AccountService) context.getBean("accountService");
    }

    @Test
    public void transfer() {
        accountService.transfer(1, 2, 100);
    }

しかし、IoCコンテナを手動で作成したり、オブジェクトを取得したりすることは避けられません.私たちがもっと望んでいるのは、この2つのステップを外して、@Autowiredでオブジェクトの自動アセンブリを完了して、ステップを簡素化して、機能のテストに重心を置くことができます.これは、次に理解するSpring統合junit実装ユニットのテストです.
まず、Mavenプロジェクトを作成し、pom.xmlにjunitのjarパッケージ依存を追加し、Springにjunitのjarパッケージ依存を統合します.

    junit
    junit
    4.12
    test



    org.springframework
    spring-test
    4.3.23.RELEASE
    test


Springがjunitを統合する場合、junitのバージョンは4.12以上を使用することが望ましい.そうしないと、次のような異常が発生する可能性がある.
java.lang.ExceptionInInitializerError
......
......
Caused by: java.lang.IllegalStateException: SpringJUnit4ClassRunner requires JUnit 4.12 or higher
......
......

次に、ユニットテストクラスを作成します.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {BeanConfig.class})
public class AccountServiceTest {
    @Autowired
    private AccountService accountService;

    @Test
    public void transfer() {
        accountService.transfer(1, 2, 100);
    }
}
@RunWith(SpringJUnit4ClassRunner.class)は固定構成であり、junitが提供するmainメソッドをSpringが提供するmainメソッドに置き換える役割を果たす.@ContextConfiguration(classes = {BeanConfig.class})はSpring IoCコンテナを作成するためのプロファイルをロードします.ここでロードするのは注釈ベースの構成Javaプロファイルです.もちろんxmlプロファイルもロードできます.たとえば、@ContextConfiguration(locations = {"classpath:bean.xml"})です.Javaプロファイルとxmlプロファイルを同時にロードしても問題ありません.
ここまでの統合作業は完了しましたが、簡単です.IoCコンテナの作成やオブジェクトの取得を考慮することなく、どのIoCコンテナのプロファイルをロードするかに関心を持つだけで、@Autowiredでターゲットオブジェクトの自動アセンブリを行うことができます.