SpringBootテスト備忘:@AutowiredしたオブジェクトでNullPointerExceptionが発生する場合の対応

Pocket

絶対後で忘れるので、備忘のため投稿。

SpringBootでMockMvcを使ったテストを行っていた際、Controllerクラス内にある@AutowiredしたServiceクラスがNullPointerExceptionになりました。

最初はスタンドアロンでテストしていたので、以下のように記述していました。

public class 〇〇ControllerTest {
    private MockMvc mockMvc;
    @Before
    public void before() throws Exception {
        mockMvc = MockMvcBuilders.standaloneSetup(new 〇〇Controller()).build();
    }
    @Test
    public void てすと() throws Exception {
    	mockMvc.perform(post("/path")
            .andExpect(status().isOk());
    }
}

しかしServiceクラスやRepositoryクラスなど、@Autowiredを使った構成にしたところ上記のNullPointerExceptionが発生。

対応策は以下2点。
・サーバー起動でテストする
・@AutowiredでDIされるクラスを呼び出す、MockMvc自体もDIする

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc
public class 〇〇ControllerTest {
    @Autowired
    private MockMvc mockMvc;
    @Before
    public void before() throws Exception {
        // mockMvc = MockMvcBuilders.standaloneSetup(new 〇〇Controller()).build();
    }
    @Test
    public void てすと() throws Exception {
    	mockMvc.perform(post("/path")
            .andExpect(status().isOk());
    }
}

うーん、DI慣れてないから。。。

広告

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です