java – 服务层测试:使用dbUnit时是否仍然是单元测试而不是模拟本机Spring域层?

我有一个服务层和一个域层.我使用普通的本机Spring存储库作为域层,在我的测试设置中,我用dbunit模拟数据库.

@Repository
public interface ExampleRepository extends PagingAndSortingRepository<ExampleEntity, Long>, JpaSpecificationExecutor<ExampleEntity> {
}

当然,我将假设Spring存储库实现没有错误,因此域层不受测试.

我对单元测试的一般知识是,在为服务层编写单元测试时,我需要模拟我的域层.

我假设域层不需要进行测试,事实上,我使用dbunit来模拟我的数据库,我可以使用这个设置来进行服务层的单元测试吗?

解决方法:

如果我理解正确,在您的测试中,Spring上下文会被提升,您的服务层将与您的域层一起进行测试,并使用DBUnit将数据插入您的测试数据库中.

有了它,让我们开始:

My general knowledge about unit testing is that I would need to mock my domain layer when writing unit tests for my service layer.

如果你想进行单元测试,那么这是正确的.您描述测试的方式,它取决于两个层是否正确,并且DB必须运行,因此,根据定义,它们是集成测试.

With my assumption that the domain layer does not need to be tested, and the with the fact, that I use dbunit to mock my database, am I allowed to use this setup for unit tests of my service layer?

我不会将DBunit称为数据库模拟.它肯定有助于填充数据库,但仍然需要DB来运行测试,并且将执行您的域层(JPA,Hibernate或任何ORM框架将生成将针对DB执行的SQL).如果你真的想要模拟域层和数据库,那么你应该考虑使用模拟(许多模拟库可以帮助你).

至于最后一个问题,如果这个设置适合你的项目,我想它没关系,但我不会称之为单元测试,而是集成测试.您必须接受,如果您的域层由于某种原因发生变化,它可能会破坏您的服务层测试.

两种方法都有利弊(单位与整合).如果它有助于您以高质量和良好的可维护性来扩展您的项目,那么就没有“正确”或“错误”的方法.

上一篇:java-与DBUnit集成测试Spring存储库层


下一篇:mysqldump xml格式和dbunit预期在phpunit测试中的xml格式