我的集成测试是否应该重用持久性库来访问数据库?
Should my integration tests reuse persistence library to have access to db?
我有一个 DDD.IdentityAccess.Domain 的实现,其中包含 IUserRepository 抽象。还有另一个 dll -> DDD.IdentityAccess.Persistence.Sql 包含 IUserRepository 抽象的实现。现在,我想一直测试我的 IdentityAccess -> Api -> DomainLogic -> 数据库。让我们来看一个 'CreateUser' 用例。我通过我的 httpClient 调用 'CreateUser',然后我想查询数据库以检查用户是否实际添加到数据库。我的休息 api 没有 'user/id' 操作,所以唯一的选择是使用 DDD.IdentityAccess.Persistence.Sql 但它会带来对 DDD.IdentityAccess.Domain 的依赖。我应该重用这个 dll,还是创建另一个与域无关的 DAL?
与组织测试设置相比,这与域驱动设计的关系较小。
集成测试的编写成本很高,但可以通过显示多个组件按预期协同工作来带来巨大的价值。这是一个权衡。
就是说,如果我理解正确的话,你的问题是你是应该模拟 sql 数据访问对象还是一直向下访问数据库,执行相同的 sql 语句。
这里没有正确或错误的答案。如果重点是测试业务逻辑,那么就集中精力测试域并模拟数据库访问层。
如果重点是测试一个简单的保存操作是否从上到下有效,那么不要嘲笑。 (但当然要使用测试数据库。)
我有一个 DDD.IdentityAccess.Domain 的实现,其中包含 IUserRepository 抽象。还有另一个 dll -> DDD.IdentityAccess.Persistence.Sql 包含 IUserRepository 抽象的实现。现在,我想一直测试我的 IdentityAccess -> Api -> DomainLogic -> 数据库。让我们来看一个 'CreateUser' 用例。我通过我的 httpClient 调用 'CreateUser',然后我想查询数据库以检查用户是否实际添加到数据库。我的休息 api 没有 'user/id' 操作,所以唯一的选择是使用 DDD.IdentityAccess.Persistence.Sql 但它会带来对 DDD.IdentityAccess.Domain 的依赖。我应该重用这个 dll,还是创建另一个与域无关的 DAL?
与组织测试设置相比,这与域驱动设计的关系较小。
集成测试的编写成本很高,但可以通过显示多个组件按预期协同工作来带来巨大的价值。这是一个权衡。
就是说,如果我理解正确的话,你的问题是你是应该模拟 sql 数据访问对象还是一直向下访问数据库,执行相同的 sql 语句。
这里没有正确或错误的答案。如果重点是测试业务逻辑,那么就集中精力测试域并模拟数据库访问层。
如果重点是测试一个简单的保存操作是否从上到下有效,那么不要嘲笑。 (但当然要使用测试数据库。)