スポンサーリンク

アノテーション

SpringBootの@SpringBootTestアノテーション

投稿日:2021年12月21日 更新日:

SpringBootの@SpringBootTestとは?

org.springframework.boot.test.context.SpringBootTest

@SpringBootTestがないとどうなるか?

// @SpringBootTest
public class LoginServiceImplTest {

    @Autowired
    private LoginServiceImpl loginServiceImpl;

    /**
     * テスト条件:XXX
     * 期待値:YYY
     */
    @Test
    public void login1() {
        String login = loginServiceImpl.login("foo", "bar");
        Assertions.assertEquals(login, "expected");
    }
}

@SpringBootTestをコメントアウトした状態で実行すると。。。

12月 23, 2021 9:47:33 午前 org.junit.platform.launcher.core.EngineDiscoveryOrchestrator lambda$logTestDescriptorExclusionReasons$7
情報: 0 containers and 1 tests were Method or class mismatch

Cannot invoke "com.springhack.help.service.LoginServiceImpl.login(String, String)" because "this.loginServiceImpl" is null
java.lang.NullPointerException: Cannot invoke "com.springhack.help.service.LoginServiceImpl.login(String, String)" because "this.loginServiceImpl" is null
	at com.springhack.help.service.LoginServiceImplTest.login1(LoginServiceImplTest.java:21)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)

このようなエラーとなります。

loginServiceImplが@AutowiredによってDIされていないため、13行目でNullPointerExceptionが発生しています。

このように、@SpringBootTestアノテーションは、@ServiceなどがついたクラスをbootRunした時のようにインスタンス化してDIするために必要なのです。

Udemyのハンズオン動画講座でSpringBootのスキルを磨く!

スポンサーリンク

-アノテーション

Copyright© 【Spring Hack】 , 2022 All Rights Reserved Powered by AFFINGER5.