2017-07-12 12 views
1

いくつかの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固有のコードを削除することです

おかげ

+1

あなたは明らかに 'DatabaseHandlerInt'をモックする必要があります。それはあなたがすでにテスト対象に' @ InjectMocks'を使っている理由です。 – Tom

答えて

関連する問題