同一.net程序集中的单元测试(Visual Studio)代码隔离-推荐

同一.net程序集中的单元测试(Visual Studio)代码隔离-推荐,.net,unit-testing,architecture,vs-unit-testing-framework,.net,Unit Testing,Architecture,Vs Unit Testing Framework,我想知道以下案例的正确建议 我的应用程序的业务模块(单个程序集)具有以下文件夹结构 -服务(文件夹) -域模型(文件夹) 场景是我需要在MyService.cs中测试MethodA,它在内部调用MyDomainModel.cs中的DomainMethodA 那么在这里,我需要填充DomainMethodA吗 基本上,当我们谈论单元测试时,我们正在测试单元。本例中的单元是一小块功能,例如,一个方法。在单元测试的情况下,我们不想离开这个方法(至少不想离开另一个模块/类),因此所有其他方面都应该被模仿

我想知道以下案例的正确建议

我的应用程序的业务模块(单个程序集)具有以下文件夹结构

-服务(文件夹)

-域模型(文件夹)

场景是我需要在MyService.cs中测试MethodA,它在内部调用MyDomainModel.cs中的DomainMethodA

那么在这里,我需要填充DomainMethodA吗


基本上,当我们谈论单元测试时,我们正在测试单元。本例中的单元是一小块功能,例如,一个方法。在单元测试的情况下,我们不想离开这个方法(至少不想离开另一个模块/类),因此所有其他方面都应该被模仿。因此,在您的情况下,
MyDomainModel
应该被模拟

另一个例子是当我们谈论集成测试时。在这种情况下,我们不想模拟任何东西,而是想测试应用程序如何经历几个不同模块和类的长序列。有时/通常,检查和验证序列中间部分的所有结果很复杂,因此在这种情况下,最好为双方创建单元测试


我建议将这两种测试类型/风格结合起来。

你需要解决你的问题,听起来你想问如何在不同的模块之间进行测试。更正您的问题标题我可以将msdn建议视为“使用垫片将代码与不属于解决方案一部分的程序集隔离。”。在上述情况下,两个类都在同一个程序集中,这就是为什么会出现混淆。参考..也许澄清模拟和垫片之间的区别是好的,看看这里:在上述情况下,模拟/存根是不可能的,因为MyDomainModel没有通过任何接口解耦。这是一门普通的课。所以这里唯一的可能性就是像shim一样绕行。
  - MyService.cs - Implements IMyService deals with service to be performed
  - MyDomainModel.cs - only deals with pure business rules and completely isolated from any infrastructure code. (its a normal class and is not decoupled via any interface)