如何模拟CrudRepository调用?

时间:2015-04-16 05:00:03

标签: java spring spring-mvc mocking mockito

我正在尝试在Spring MVC应用程序上进行简单的控制器测试

我有这个测试类

@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类有这个bean

@Bean
public NotificacaoRepository todoService() {
    return Mockito.mock(NotificacaoRepository.class);
}

我的存储库就是那个

public interface NotificacaoRepository extends CrudRepository<Notificacao, Long> {
}

但它甚至没有编译,我一直得到“ 无法对类型为CrudRepository ”的非静态方法save(Notificacao)进行静态引用最后一行“ when(NotificacaoRepository.save(已添加))

我在这个链接http://www.petrikainulainen.net/programming/spring-framework/unit-testing-of-spring-mvc-controllers-normal-controllers/中的一个示例中看到了这种用法,但他使用的是服务类,它与使用CrudRepository不完全相同。

我试图找到一个如何测试CrudRepository实现但没有找到它的例子,所以我认为这应该像其他人一样简单

1 个答案:

答案 0 :(得分:1)

由于save方法不是静态的,因此您必须更改

  when(NotificacaoRepository.save( added )).thenReturn(added);

将对象用作:

when(notificacaoRepositoryMock.save( added )).thenReturn(added);