Я изучаю весну и пишу простую весеннюю загрузку. Я хочу написать модульный тест для моего контроллера. Контроллер взаимодействует с репозиторием, который я хочу высмеять для целей теста. Использование различных руководств и документации я пришел к следующему:Spring mvc mock repository
Мой тест:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes={TestConfiguration.class,MyWebappApplication.class})
@WebAppConfiguration
public class MyWebappApplicationTests {
private MockMvc mockMvc;
@Autowired
private MyRepository myRepositoryMock;
@Autowired
private WebApplicationContext webApplicationContext;
@Before
public void setUp() {
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
@Test
public void contextLoads() throws Exception {
MyEntity e1 = new MyEntity();
e1.setId(1);
e1.setDescription("e1");
MyEntity e2 = new MyEntity();
e2.setId(2);
e2.setDescription("e2");
when(myRepositoryMock.findAll()).thenReturn(Arrays.asList(e1, w2));
mockMvc.perform(get("/"))
.andExpect(status().isOk());
}
}
Мой TestConfigiration, что обеспечивает фиктивный хранилищу:
@Configuration
public class TestConfiguration {
@Bean
public MyRepository myRepository() {
return Mockito.mock(MyRepository.class);
}
}
Когда я бегу тест, я не получаю издевательский репозиторий, введенный в тест, вместо этого я получаю реальный, и я получаю следующую строку в выходе журнала:
Overriding bean definition for bean 'myRepository' with a different definition: replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=2; dependencyCheck=0; autowireCandidate=true; primary=true; factoryBeanName=testContext; factoryMethodName=ideaRepository; initMethodName=null; destroyMethodName=(inferred); defined in murdoch.suppriseme.TestContext] with [Root bean: class [org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null]
Я попытался использовать аннотацию @Primary
на bean-компоненте, чтобы иметь преимущество, но это не сработало. Что мне не хватает?
Просто опечатка, я обновил вопрос. – 3urdoch