C# 单元测试,模拟?

C# 单元测试,模拟?,c#,unit-testing,mocking,C#,Unit Testing,Mocking,应该使用目标类的内置单元测试生成器(VS),还是应该学习如何编写单元测试?“模拟”是什么?我听了一遍又一遍,但没有人愿意给出一个好的解释 提前感谢。您需要学会自己编写单元测试。从正确的角度出发,充分理解许多人在以下方面会犯错误的术语: 单元测试:测试单个代码单元,非常小的原子测试 集成测试:测试集成在一起的多个代码单元,以遍历不同的层并确保它们正确地相互使用。这些工作应在单元测试验证各个单元独立工作后进行。许多人错误地将这些称为单元测试 内置验证测试:通过部署内置产品并运行将以用户希望的方式与之

应该使用目标类的内置单元测试生成器(VS),还是应该学习如何编写单元测试?“模拟”是什么?我听了一遍又一遍,但没有人愿意给出一个好的解释


提前感谢。

您需要学会自己编写单元测试。从正确的角度出发,充分理解许多人在以下方面会犯错误的术语:

单元测试:测试单个代码单元,非常小的原子测试

集成测试:测试集成在一起的多个代码单元,以遍历不同的层并确保它们正确地相互使用。这些工作应在单元测试验证各个单元独立工作后进行。许多人错误地将这些称为单元测试

内置验证测试:通过部署内置产品并运行将以用户希望的方式与之交互的测试来测试内置产品。也经常被错误地称为单元测试。这些是最大的、功能最全的测试,通常由测试团队手动完成,而不是自动完成

以下是MOQ的快速入门,这是一个模拟框架:

模拟是一种行为,它获取一小段可能依赖于其他内容的代码,模拟这些其他内容,以便您可以控制要测试的代码周围的环境

模拟的目的是测试中的原子性。它允许您只测试所需的单个代码段,而不会因为依赖代码段中的错误而影响其测试。模拟还使您能够构建各种场景来测试每段代码的边缘情况


模拟通常用于在单元测试中围绕目标代码创建边界,尽管在集成测试中也使用它来构建作为目标集成代码链种子的资源并不少见。

这些“模拟”是否应该保存在类中供自己使用,还是只是暂时测试一些代码,然后删除模拟?@ebb:这是一种老派的做法,效果很好,但这就是模拟框架的用武之地,它们允许您模拟对象,而无需实际创建要使用的模拟类。然而,所有的模拟都依赖于与你假装的对象有多态关系。因此,您需要一个接口或基类来共享,或者需要虚拟方法来覆盖您将要伪装成的对象。@ebb-我建议先学习基本单元测试,以获取一些不依赖于外部系统(如web服务和数据库)的代码。一旦您完成了其中的一些工作,您就可以学习如何通过模拟与外部系统交互的代码进行单元测试。和+1@Jimmy,特别是区分单元测试和集成测试。有太多人编写集成测试,认为它们是单元测试,因此被TDD推迟。单元测试不仅仅是测试代码的一种方式——它驱动模块化设计。@AlexHumphrey我还认为单元测试也是最强大的调试工具。我永远不会错过在功能的最高级别出现错误的日子,然后让do一步一步地通过它调用的数百行方法查找某些计算错误的地方。大多数情况下,单元测试可以发现过程中的确切步骤。可能重复