いくつかのSpringコントローラをテストする必要があります。私はモキトを使用します。しかし、特定のルートをテストすると、Autowiredアノテーションが機能しないため、コントローラのリンク関数は依存関係(NullPointerException)を使用できません。私のコードの下SpringテストとNullPointerException
:
Testクラス:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class ClassTest {
@InjectMocks
private abcController abc;
private MockMvc mockMvc;
@Before
public void setup() throws IOException {
MockitoAnnotations.initMocks(this);
this.mockMvc = MockMvcBuilders.standaloneSetup(abc).build();
}
@Test
public void test1() throws Exception {
this.mockMvc.perform(get("/api/abc/"))
.andExpect(status().isOk())
.andExpect(jsonPath("$[0]", is("a")))
.andExpect(jsonPath("$[1]", is("b")));
}
コントローラ(ここでdatabaseHandlerがnullにNullPointer例外が起こる):
@RestController
@ComponentScan("com.example.*")
@Repository(value="abcController")
public class abcController extends BaseController {
@Autowired
@Qualifier("DatabaseHandler")
DatabaseHandlerInt databaseHandler;
@RequestMapping(value = "/api/abc", method = RequestMethod.GET)
public @ResponseBody ArrayList getContent() throws Exception {
// Null pointer happend here
return databaseHandler.example();
}
私は設定がに欠けているので、それはだと思いますテストクラスが、私はそれを修正する方法を見つけることができません。
@MockBean
private DatabaseHandlerInt databaseHandler;
モックは春で注入される。この方法:最良の方法は、あなたのユニットテストで@MockBean
注釈をこのように使用し、テストからmockito固有のコードを削除することです
おかげ
あなたは明らかに 'DatabaseHandlerInt'をモックする必要があります。それはあなたがすでにテスト対象に' @ InjectMocks'を使っている理由です。 – Tom