2016-05-26 19 views
5

私は基本的なSpringブートの例を拡張し、コントローラに「autowired」リポジトリの依存関係を追加します。私はその依存関係のためのMockitoモックを注入するために単体テストを修正したいと思いますが、どうしたらよいか分かりません。Spring Boot MockMvcユニットテストでautowired依存関係をモックする方法は?

私はこのような何かができることを期待していた:

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = MockServletContext.class) 
@WebAppConfiguration 
public class ExampleControllerTest { 

    private MockMvc mvc; 

    @InjectMocks 
    ExampleController exampleController; 

    @Mock 
    ExampleRepository mockExampleRepository; 

    @Before 
    public void setUp() throws Exception { 
     MockitoAnnotations.initMocks(this); 
    mvc = MockMvcBuilders.standaloneSetup(new ExampleController()).build(); 
    } 

    @Test 
    public void getExamples_initially_shouldReturnEmptyList() throws Exception { 
     mvc.perform(MockMvcRequestBuilders.get("/example").accept(MediaType.APPLICATION_JSON)) 
       .andExpect(status().isOk()) 
       .andExpect(content().string(equalTo("[]"))); 
    } 
} 

をしかし、それはMockMvcにモックを注入しません。誰でもコンストラクタの引数ではなく、@Autowiredの依存関係を使ってこれを行う方法を説明できますか?

+1

あなたの豆のモックを含む構成を作成してラインmvc = MockMvcBuilders.standaloneSetup(new ExampleController()).build();で新しいものを作成するのに注入モックでExampleController exampleController;フィールドを使用する必要があります。次に、あなたのセットアップでモックをリセットします。 (SpringBoot 1.4では '@ MockBean'アノテーションを追加することができます)。 –

答えて

6

代わり@RunWith(SpringJUnit4ClassRunner.class)@RunWith(MockitoJUnitRunner.class)を使用して、あなたの代わりに

+0

それは面白いです。私はそのクラスについて聞いていなかった。しかし、この1つの変更によって模擬依存関係がautowiredになることはありません –

+0

@RunWith(Mockito ...)を使って、この行に 'mvc = MockMvcBuilders.standaloneSetup(new ExampleController() ); '注入されたモックを持つexampleController。この行のようにexampleコントローラの新しいインスタンスを作成すると、自動配線は適用されません。 –

+0

nice。それはトリックだと思われる。チャンスがあれば、この追加情報を含めるように答えを更新してください。そして、私に多くの時間を節約してくれてありがとう。 –

関連する問題