0

我在SO有一个问题,询问如何将中间层连接到数据集。

我提出了一个答案,显示了我的想法,但我对紧密耦合不满意。我刚刚开始进行测试,并发现它对我的代码来说是一个很好的目标。

这段代码如何解耦以进行单元测试?

谢谢你,
基思

4

5 回答 5

3

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

哦,为了模拟,我使用 RhinoMock 取得了一些成功。我还鼓励您查看 IoC ( http://www.castleproject.org/ )。

于 2008-10-14T07:34:53.227 回答
1

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

我鼓励您与 James Kovacs一起观看dnrTV 第 126 集。

他准确地展示了您正在寻找的东西。

于 2008-10-28T18:45:29.960 回答
0

你试过Spring.net吗?它将使您的代码更干净且耦合更少。它还提供了有用的类来进行集成测试。

于 2008-09-30T14:37:00.383 回答
0

这取决于您要测试的内容:

  • 您想测试从数据库中检索数据吗?
  • 从数据集中构建对象?
  • 插入或更新数据库?
  • 等等...

这里有一个建议:

一个订单包含它的所有子订单。这是一个集合体,一个整体。您从存储库中获得包含详细信息的订单:

var order = repository.GetOrderBy(id);

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

var dataset = orderDatabase.GetOrderAndDetailsBy(id);

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

var order = orderBuilder.CreateOrderAndDetailsFrom(dataset);

您必须按如下方式创建存储库:

var repository = new OrderRepository(orderDatabase, orderBuilder);

现在,您可以根据要测试的内容创建带有假合作者的存储库。

于 2008-10-25T22:42:09.903 回答
-2

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

温迪

于 2008-09-30T14:32:55.713 回答