如何解耦中间层和数据集以进行单元测试?

时间:2020-03-06 14:55:31  来源:igfitidea点击:

我在SO上有一个问题,问如何将中间层连接到DataSet。

我提出了一个答案,说明了我的想法,但是我对紧密的耦合并不满意。我刚刚开始进行测试,并为我的代码找到了一个不错的目标。

该代码将如何解耦以进行单元测试?

谢谢,
基思

解决方案

如果我们有实体对象,则可以使用模拟对中间层进行单元测试。

温迪

我们是否尝试过Spring.net?这将使代码更整洁,耦合度更低。它还提供了有用的类来进行集成测试。

海事组织;数据集是邪恶的。它们是并且仅应用作脱机数据库。 IMO,仅此而已。但是,我们在数据访问层(DAL)中所做的操作不会真正影响业务层(BL)。我只是使用它们之间的对象(使用接口)(IList),然后使用一个接口定义DAL(IRepository),并且我们可以模拟该接口以返回BL中进行单元测试所需的任何内容。单元测试数据集是另一种野兽,从来没有尝试过,我希望永远不必...内存数据库可能是我们最好的选择...

哦,为了嘲笑,我成功地使用了RhinoMock。我也鼓励我们研究IoC(http://www.castleproject.org/)。

这取决于我们要测试的内容:

  • 我们是否要测试从数据库检索的数据?
  • 从数据集中构建对象?
  • 插入或者更新数据库?
  • 等等...

这是一个建议:

订单包含其所有子代。这是一个整体。
我们从存储库中获得包含详细信息的订单:

var order = repository.GetOrderBy(id);

存储库从数据库获取数据:

var dataset = orderDatabase.GetOrderAndDetailsBy(id);

存储库可以使用构建器来创建订单:

var order = orderBuilder.CreateOrderAndDetailsFrom(dataset);

我们将必须按以下方式创建存储库:

var repository = new OrderRepository(orderDatabase, orderBuilder);

现在,我们可以根据需要测试的内容,使用伪造的合作者创建存储库。

我们需要IOC(控制反转)和模拟对象。

我鼓励我们和James Kovacs一起看dnrTV 126集。

他确切地说明了我们要寻找的东西。