来自抽象父类的Spring数据存储库模拟方法在单元测试期间失败

时间:2018-12-13 03:07:26

标签: java spring unit-testing mockito

基本存储库,它是所有存储库的父类

public interface BaseRepository<T extends Base, K extends Serializable> extends JpaRepository<T, K> {

}

测试用例存储库类

@Repository
public interface TestCaseRepository extends BaseRepository<TestCase, UUID> {

}

基本服务类

public abstract class BaseServiceImpl<T extends Base> implements BaseService<T> {

    protected BaseRepository<T, UUID> repository;

    public T findById(UUID id) {
        Optional<T> optional = repository.findById(id);
        if (optional.isPresent()) {
            return optional.get();
        }
        return null;
    }

    @Transactional
    public boolean delete(UUID id) throws Exception {
        if (repository.existsById(id)) {
            repository.deleteById(id);
        } else {
            throw new EntityNotFoundException("id: " + id.toString() + " does not exist.");
        }
        return !repository.existsById(id);
    }

}

在单元测试中添加以下代码

testCaseRepository = Mockito.mock(TestCaseRepository.class);
        when(testCaseRepository.saveAndFlush(isA(TestCase.class))).thenReturn(testCase);
        when(testCaseRepository.existsById(UUID.fromString("11111111-1111-1111-1111-111111111111"))).thenReturn(true);
        ReflectionTestUtils.setField(testCaseService, "testCaseRepository", testCaseRepository);

当我在下面的测试方法中调用方法testCaseRepository.existsById()时

 @Test
    public void testDelete() {
        try {
            Assert.assertFalse(testCaseService.delete(UUID.fromString("11111111-1111-1111-1111-111111111111")));
        } catch (Exception e) {
            Assert.fail(e.getMessage());
        }
    }

断言错误始终是ID不存在。但是我在模拟方法中设置了“ return true”。显然,existingById()返回false。关于这个问题有什么想法吗?谢谢!

0 个答案:

没有答案