Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Moq和TDD,从哪里开始?_C#_Unit Testing_Tdd_Moq - Fatal编程技术网

C# 使用Moq和TDD,从哪里开始?

C# 使用Moq和TDD,从哪里开始?,c#,unit-testing,tdd,moq,C#,Unit Testing,Tdd,Moq,我有一个服务器应用程序,我想知道如果我想开始实现TDD和使用Moq,应该从哪里开始 关于这一主题,我能读到哪些不太“网络导向”的好书 我对这件事有疑问,比如: 我应该模拟我想测试的每个对象,还是只模拟那些我无法实现的对象,比如文本编写器 我的服务器需要大量的设置才能真正执行我想要测试的任何操作,我是否应该将其塞进[TestInitialize]函数中 如果我想测试更深层次的功能,我应该如何链接我的测试?您不会模拟要测试的对象。如果您这样做,您是在测试模拟,而不是您的对象!您需要模拟正在测试的对象

我有一个服务器应用程序,我想知道如果我想开始实现TDD和使用Moq,应该从哪里开始

关于这一主题,我能读到哪些不太“网络导向”的好书

我对这件事有疑问,比如:

我应该模拟我想测试的每个对象,还是只模拟那些我无法实现的对象,比如文本编写器

我的服务器需要大量的设置才能真正执行我想要测试的任何操作,我是否应该将其塞进
[TestInitialize]
函数中


如果我想测试更深层次的功能,我应该如何链接我的测试?

您不会模拟要测试的对象。如果您这样做,您是在测试模拟,而不是您的对象!您需要模拟正在测试的对象的依赖关系。

我最喜欢的关于TDD的书之一是(Kent Beck)。我也很喜欢他做的一件事

第一集:启动测试(28分钟)

在本集中,我们将对示例应用程序的第一个特性进行第一次测试,并将其切分以提供更频繁的反馈

第二集:独立测试(23分钟)

在本集中,我们确保测试不会相互影响。一旦测试被隔离,我们就执行几个新的操作

第三集:大特写(25分钟)

在本期节目中,我们将选取一个大型功能并将其切分,以提供更频繁的反馈。最后,我们清理代码以消除重复并使代码更易于阅读

第四集:收尾(20分钟)


在本集中,我们将完成示例应用程序的功能,并准备好供其他人使用。在开发早期被推迟的设计决策现在更加清晰了。本系列以所有剧集的经验总结结束

如果您希望遵循TDD模式,您的代码应该在测试的开发过程中不断发展。您将使用单响应性和前面提到的mock/stub来测试您正在测试的类所具有的任何依赖性。通过这种方式,您可以在任何依赖项上设置虚拟数据和预期行为,而无需进一步担心它们

这有一个简短的介绍:不幸的是,我没有任何具体的书名,我可以从个人经验推荐

阅读这篇文章也可能有助于开始学习:

我推荐两本书:,作者肯特·贝克。这是一本关于TDD的好书,我特别喜欢,因为他举了一个例子,这对理解节奏和思维过程非常有用。另一方面,它有点轻嘲弄。为此,我要读罗伊·奥舍洛夫的著作。正如标题所示,它不是专门关注TDD,而是关注如何编写好的单元测试;他对模拟和存根有很好的报道

关于应该模拟的内容,模拟的思想是允许您将正在测试的类/函数与环境的其余部分隔离开来,以便您可以针对您控制的假环境测试其行为。在这个框架中,您不应该嘲笑类,而应该嘲笑它所依赖的东西

一个简单的例子:如果您有一个使用记录器的类,那么测试该类是否“写入”记录器将是非常痛苦的,并且可能涉及检查记录器是否已写入文本文件之类的事情。这在很多层面上都不是一个好主意——首先,您的类并不关心记录器如何具体完成其工作。在这种情况下,您将用一个伪造的模拟记录器替换类中的记录器实例,然后您可以验证您的类是否在适当的时间调用记录器,而不必担心记录器到底做了什么

关于服务器初始化:单元测试通常在内存中,与环境没有依赖关系,因此如果您正在进行TDD,您可能不必这样做。通常,单元测试中太多(任何?)初始化代码都是一个坏迹象

这表明您正在寻找更多的验收测试/BDD样式的测试。我推荐这篇最近在MSDN杂志上发表的文章;它解释了如何以测试优先的方式进行开发,方法是共同开发高级测试,以验证应用程序是否符合用户的要求(验收测试,您将在其中运行实际的服务器和应用程序),以及应用程序是否符合开发人员的要求(单元测试)


希望这对你有帮助,并且测试愉快

为了完成任何事情,我需要做某些事情,因为我想要测试的东西通常与服务器打开时实例化的某个元素相关。所以我需要执行我的脚本编译器(它构建了一个dll并包含了它的程序集),初始化和配置这些文件(也就是说在相当多的脚本中调用静态方法调用)