我在SO处有一个问题,询问如何将中间层连接到DataSet。
我提出了一个答案,显示了我的想法,但我对紧耦合感到不满意。我刚刚开始进行测试,并为我的代码找到了一个很好的目标。
如何将此代码解耦以允许进行单元测试?
谢谢你,
基思
答案 0 :(得分:3)
IMO; DataSet是邪恶的。它们是,并且应该仅用作脱机数据库。没什么了,IMO。但是,您在数据访问层(DAL)中执行的操作不应该真正影响您的业务层(BL)。我只是在它们之间使用对象(使用接口)(IList),然后使用接口来定义你的DAL(IRepository),并且你可以模拟该接口以返回BL中用于单元测试的任何内容。单元测试数据集是另一个野兽,从来没有尝试过,我希望永远不要......可能内存数据库是你最好的选择......
哦,为了嘲笑我已经使用了RhinoMock取得了一些成功。我也鼓励你看看IoC(http://www.castleproject.org/)。
答案 1 :(得分:1)
答案 2 :(得分:0)
你试过Spring.net吗?它将使您的代码更清晰,更少耦合。它还提供useful classes来进行集成测试。
答案 3 :(得分:0)
这取决于你想要测试的内容:
这是一个建议:
订单包含其所有子项。这是一个整体,一个整体。 您从订单中获得包含详细信息的订单:
var order = repository.GetOrderBy(id);
存储库从数据库中获取数据:
var dataset = orderDatabase.GetOrderAndDetailsBy(id);
存储库可以使用构建器来创建订单:
var order = orderBuilder.CreateOrderAndDetailsFrom(dataset);
您必须按如下方式创建存储库:
var repository = new OrderRepository(orderDatabase, orderBuilder);
现在,您可以创建一个包含假协作者的存储库,具体取决于您要测试的内容。
答案 4 :(得分:-2)
如果您有实体对象,则可以使用模拟对中间层进行单元测试。