2016-05-26 45 views
5

Temel Spring Boot örneklerinde, denetleyicime "otomatikleştirilmiş" bir depo bağımlılığı ekleyerek genişletiyorum. Bu bağımlılık için bir Mockito alayının enjekte edilmesi için birim testlerini değiştirmek isterim ama nasıl emin değilim.Spring Boot MockMvc Unit testlerinde otomatik kablolu bağımlılıklar nasıl takılır?

@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("[]"))); 
    } 
} 

ama MockMvc içine alay enjekte değildir:

Ben böyle bir şey yapabileceğini bekliyordum. Yapıcı argümanlarından ziyade, bunun @Autowired bağımlılıkları ile nasıl yapılacağını açıklayabilir mi?

+1

sizin fasulye bir taklidini içeren bir yapılandırması oluşturma hattı mvc = MockMvcBuilders.standaloneSetup(new ExampleController()).build(); yenisini yaratma enjekte mocks ile ExampleController exampleController; alanını kullanmak zorunda ediniz. Daha sonra kurulumunuzda alayları sıfırlayın. (İlkbahar Çizgisi 1.4'te, bunu daha kolay hale getiren bir '@ MockBean 'notu ekleyebileceksiniz). –

cevap

6

yerine @RunWith(SpringJUnit4ClassRunner.class) ait @RunWith(MockitoJUnitRunner.class) kullanmak ve yerine

+0

Bu ilginç. O sınıfı duymamıştım. Ancak, bu bir değişiklik otomatik olarak –

+0

telsiz bağımlılığı ile sonuçlanır görünmüyor. Lütfen @RunWith (Mockito ...) kullanmayı deneyin ve bu satırda kullanın mvc = MockMvcBuilders.standaloneSetup (new ExampleController()).); enjekte edilen alaylarla exampleController. Bu satırda yaptığınız gibi yeni bir örnek denetleyici örneği oluşturursanız, otomatik kablolama uygulanmaz. –

+0

güzel. Bu hile gibi görünüyor. Bir şansınız varsa, bu ek bilgileri eklemek için cevabınızı güncelleyin, lütfen. Ayrıca, bana bir sürü zaman kazandırdığın için teşekkürler. –

İlgili konular