模拟删除方法

时间:2017-06-14 09:08:15

标签: java unit-testing mocking mockito

我想用验证实现delete方法并测试它:

    @Override
    public boolean delete(Long id) {
        final Entity byId = repository.findById(id);
        if (byId != null) {
            repository.delete(byId);
        }
        final Entity removed = repository.findById(id);
        if (removed != null) {
            return false;
        }
        return true;
    }

    @Test
    public void deleteTest() throws Exception {
        // given
        final Entity entity = new Entity(1L);

        Mockito.when(repository.findById(1L))
                .thenReturn(entity);

        // when
        final boolean result = service.delete(1L);

        // then
        Mockito.verify(repository, times(1))
                .delete(entity);
        assertThat(result, equalTo(true));
    }

但是现在Mockito在服务中嘲笑对象“已删除”,方法返回false。我该怎么测试呢?

1 个答案:

答案 0 :(得分:3)

正如我从您的代码中看到的那样,您正在调用方法repository.findById两次。但是你并没有在测试中嘲笑这种行为。 您需要使用thenReturn两次,第一次使用entity,然后使用null

Mockito.when(repository.findById(1L)).thenReturn(entity).the‌​nReturn(null)

使用现有代码,当您执行final Entity removed = repository.findById(id);时,remove将获得分配entity而非空。