【发布时间】:2008-09-30 14:27:01
【问题描述】:
我在SO 有一个问题,询问如何将中间层连接到数据集。
我提出了一个答案,显示了我的想法,但我对紧密耦合不满意。我刚刚开始进行测试,发现这是我的代码的一个很好的目标。
如何解耦这段代码以进行单元测试?
谢谢你,
基思
【问题讨论】:
标签: c# .net integration-testing
我在SO 有一个问题,询问如何将中间层连接到数据集。
我提出了一个答案,显示了我的想法,但我对紧密耦合不满意。我刚刚开始进行测试,发现这是我的代码的一个很好的目标。
如何解耦这段代码以进行单元测试?
谢谢你,
基思
【问题讨论】:
标签: c# .net integration-testing
国际海事组织;数据集是邪恶的。它们是并且应该只用作离线数据库。仅此而已,IMO。但是,您在数据访问层 (DAL) 中所做的事情不应真正影响您的业务层 (BL)。我只是在它们之间使用对象(使用接口)(IList),然后使用接口来定义您的 DAL(IRepository),并且您可以模拟该接口以返回您在 BL 中需要的任何内容以进行单元测试。单元测试数据集是另一种野兽,从未尝试过,我希望永远不必...也许内存数据库是您最好的选择...
哦,对于模拟,我使用 RhinoMock 取得了一些成功。我还鼓励您查看 IoC (http://www.castleproject.org/)。
【讨论】:
【讨论】:
你试过Spring.net吗?它将使您的代码更简洁且耦合更少。它还提供useful classes 来进行集成测试。
【讨论】:
这取决于您要测试的内容:
这里有一个建议:
一个订单包含它的所有子订单。这是一个集合体,一个整体。 您会从存储库中获得包含详细信息的订单:
var order = repository.GetOrderBy(id);
存储库从数据库中获取数据:
var dataset = orderDatabase.GetOrderAndDetailsBy(id);
存储库可以使用构建器来创建订单:
var order = orderBuilder.CreateOrderAndDetailsFrom(dataset);
您必须按如下方式创建存储库:
var repository = new OrderRepository(orderDatabase, orderBuilder);
现在您可以创建一个包含假合作者的存储库,具体取决于您要测试的内容。
【讨论】:
如果你有实体对象,你可以使用 mocks 对你的中间层进行单元测试。
【讨论】: