如何模拟 CrudRepository 调用?
How to mock a CrudRepository call?
我正在尝试对 Spring MVC 应用程序进行简单的控制器测试
我有这个测试class
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {TestContext.class, WebAppConfig.class})
@WebAppConfiguration
public class NotificacaoControllerTest {
private MockMvc mockMvc;
@Autowired
private NotificacaoRepository notificacaoRepositoryMock;
@Autowired
private WebApplicationContext webApplicationContext;
@Before
public void setUp() {
//We have to reset our mock between tests because the mock objects
//are managed by the Spring container. If we would not reset them,
//stubbing and verified behavior would "leak" from one test to another.
Mockito.reset(notificacaoRepositoryMock);
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
@Test
public void add_NewTodoEntry_ShouldAddTodoEntryAndRenderViewTodoEntryView() throws Exception {
Notificacao added = new Notificacao(123,"resource","topic", "received", "sent");
when(NotificacaoRepository.save( added )).thenReturn(added);
我的 TestContext class 有这个 bean
@Bean
public NotificacaoRepository todoService() {
return Mockito.mock(NotificacaoRepository.class);
}
我的存储库就是这样
public interface NotificacaoRepository extends CrudRepository<Notificacao, Long> {
}
但它甚至没有编译,我不断收到“无法从类型 CrudRepository[=31= 中对非静态方法 save(Notificacao) 进行静态引用]" 在最后一行 "when(NotificacaoRepository.save( 添加 ))"
我在这个 link http://www.petrikainulainen.net/programming/spring-framework/unit-testing-of-spring-mvc-controllers-normal-controllers/ 的示例中看到了这种用法,但他在那里使用了一项服务 class 并且它与 CrudRepository 的使用并不完全相同。
我试图找到一个如何测试 CrudRepository 实现的示例,但没有找到,所以我认为这应该像其他模拟一样简单
由于保存方法不是静态的,您将不得不更改
when(NotificacaoRepository.save( added )).thenReturn(added);
将对象用作:
when(notificacaoRepositoryMock.save( added )).thenReturn(added);
我正在尝试对 Spring MVC 应用程序进行简单的控制器测试
我有这个测试class
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {TestContext.class, WebAppConfig.class})
@WebAppConfiguration
public class NotificacaoControllerTest {
private MockMvc mockMvc;
@Autowired
private NotificacaoRepository notificacaoRepositoryMock;
@Autowired
private WebApplicationContext webApplicationContext;
@Before
public void setUp() {
//We have to reset our mock between tests because the mock objects
//are managed by the Spring container. If we would not reset them,
//stubbing and verified behavior would "leak" from one test to another.
Mockito.reset(notificacaoRepositoryMock);
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
@Test
public void add_NewTodoEntry_ShouldAddTodoEntryAndRenderViewTodoEntryView() throws Exception {
Notificacao added = new Notificacao(123,"resource","topic", "received", "sent");
when(NotificacaoRepository.save( added )).thenReturn(added);
我的 TestContext class 有这个 bean
@Bean
public NotificacaoRepository todoService() {
return Mockito.mock(NotificacaoRepository.class);
}
我的存储库就是这样
public interface NotificacaoRepository extends CrudRepository<Notificacao, Long> {
}
但它甚至没有编译,我不断收到“无法从类型 CrudRepository[=31= 中对非静态方法 save(Notificacao) 进行静态引用]" 在最后一行 "when(NotificacaoRepository.save( 添加 ))"
我在这个 link http://www.petrikainulainen.net/programming/spring-framework/unit-testing-of-spring-mvc-controllers-normal-controllers/ 的示例中看到了这种用法,但他在那里使用了一项服务 class 并且它与 CrudRepository 的使用并不完全相同。
我试图找到一个如何测试 CrudRepository 实现的示例,但没有找到,所以我认为这应该像其他模拟一样简单
由于保存方法不是静态的,您将不得不更改
when(NotificacaoRepository.save( added )).thenReturn(added);
将对象用作:
when(notificacaoRepositoryMock.save( added )).thenReturn(added);