【发布时间】:2021-03-15 10:01:11
【问题描述】:
我对单元测试或集成测试不是很有经验。我有以下场景:我只是想从我的数据库中获取一个对象以用于测试。对象不会更新,只是懒得手动创建,因为类比较长,比较麻烦。
我从数据库中获取内容的结构是一个调用存储库接口的服务类。现在我的问题是运行测试时存储库为空。
使用
@DataJpaTest 和
@AutoConfigureTestDatabase(replace = Replace.NONE) 我可以连接到我的数据库,但是服务类中的存储库为空。
我尝试模拟存储库接口并将其注入服务类,但随后我返回的对象为 null,这显然违背了目的。
如果您还可以链接我一些教程,我会很高兴,因为我找不到与我的案例相关的任何教程。所有其他解释都描述了如何自己测试查询,这是我不想要的。我只需要一个对象。
如果我遗漏了一些明显的东西,我深表歉意,我在测试方面真的缺乏经验。
这就是我所拥有的:
我的服务:
@Service
@Transactional(readOnly = true)
public class MyService{
@Autowired
private MyRepository repo;
public List<MyObj> findAll() {
return repo.findAll();
}
public MyObj findMyObjByCode(String code) {
return repo.findMyObjByCode(code);
}
}
测试:
@ActiveProfiles("test")
@DataJpaTest
@AutoConfigureTestDatabase(replace = Replace.NONE)
class MyObjTest{
@Test
void factoryTest() {
MyService service = new MyService ();
MyObj obj = service.findMyObjByCode("code");
MyDto dto = MyDto.from(obj);
//assertions
}
}
【问题讨论】:
-
这是单元测试还是集成测试?特定测试的目的是什么?
-
@tgdavies 据我了解,我会说单元测试。我有一个对应于数据库表和 DTO 的对象。为了确定原始对象和DTO之间的映射是否正确,我想从数据库中获取一个对象,将它映射到我的DTO,然后断言各种东西。
标签: java spring database unit-testing integration-testing