Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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
Visual studio 2010 单元测试-TDD-C#_Visual Studio 2010_C# 4.0_Tdd_Nunit - Fatal编程技术网

Visual studio 2010 单元测试-TDD-C#

Visual studio 2010 单元测试-TDD-C#,visual-studio-2010,c#-4.0,tdd,nunit,Visual Studio 2010,C# 4.0,Tdd,Nunit,我正在使用测试驱动开发(C#,控制台应用程序)为robot构建一个原型。首先,我创建了一个测试项目和一个类RobotTest。在这里,我编写了测试方法,如果我构建了Robot类,那么我将失败并通过测试。然后,我创建了一个类RobertPrototype,其中创建了Robot类对象以使用Robot类中的方法。除此之外,我还在RobertPrototype中添加了一些其他方法(用于解析输入) 我不知道这是否是我在开发TDD时必须遵循的方法。我必须在Robot类本身中包含所有方法吗 请引导我。谢谢 一

我正在使用测试驱动开发(C#,控制台应用程序)为robot构建一个原型。首先,我创建了一个测试项目和一个类RobotTest。在这里,我编写了测试方法,如果我构建了Robot类,那么我将失败并通过测试。然后,我创建了一个类RobertPrototype,其中创建了Robot类对象以使用Robot类中的方法。除此之外,我还在RobertPrototype中添加了一些其他方法(用于解析输入)

我不知道这是否是我在开发TDD时必须遵循的方法。我必须在Robot类本身中包含所有方法吗


请引导我。谢谢

一般来说,您首先要编写愿意进行单元测试的类的框架,而不实现所有方法。然后编写关于这个类和所有您愿意测试的方法的单元测试。然后运行单元测试,该测试将失败,因为您尚未实现这些方法(您让它们抛出
NotImplementedException
),但至少您的单元测试可以编译和执行。然后继续实现这些方法并运行通常应该通过的单元测试。然后重构代码,当您运行单元测试时,它仍然应该通过。你继续下一个类,这个过程会重复。

一般来说,你从编写你愿意进行单元测试的类的框架开始,并保留所有未实现的方法。然后编写关于这个类和所有您愿意测试的方法的单元测试。然后运行单元测试,该测试将失败,因为您尚未实现这些方法(您让它们抛出
NotImplementedException
),但至少您的单元测试可以编译和执行。然后继续实现这些方法并运行通常应该通过的单元测试。然后重构代码,当您运行单元测试时,它仍然应该通过。继续下一个类,这个过程将重复。

TDD的一个实现是红绿重构。
在编写测试(红色)时,需要向Robot添加方法才能通过(绿色)。下一步是将代码组织到其他类中(重构)。用于通过测试的初始代码可能与最终代码位于不同的类中。

TDD的一个实现是红绿重构。 在编写测试(红色)时,需要向Robot添加方法才能通过(绿色)。下一步是将代码组织到其他类中(重构)。用于通过测试的初始代码可能与最终代码位于不同的类中

我必须在Robot类本身中包含所有方法吗

我不明白这个问题。您已经说过您的测试在一个单独的项目中,并且您正在编写一个单独的客户端类
RobotPrototype
,它使用
Robot

在这一点上,这似乎是一个合理的设计

我认为你在为一些机器人类方法编写的每一个“工作”测试编写所有类的位,这让你感到困惑。这不是思考TDD的方式。这并不意味着编写一个失败的测试来创建一个Robot对象,然后编写一个Robot构造函数的shell,编写一个使用Robot的类的shell,编写一个使用RobotPrototype的客户端的shell。然后编写一个失败的测试,然后编写一个空的Robot方法,编写使用该方法的RobotPrototype代码,编写使用RobotPrototype使用的客户端代码。不,不,不

机器人设计中的每个类都有自己相应的测试类。每个类中的每个方法在其相应的测试类中都有自己的相应方法TDD循环是在逐个方法的基础上执行的。

试试这个:

  • 关注一个类及其对应的测试类。显然,你首先需要一个机器人。从机器人类开始
  • 使用TDD循环,编写函数方法
  • 当您有足够的
    Robot
    功能来做某事时,您可以开始使用代码编写一些Robot(
    RobotPrototype
    class)
  • RobotPrototype类有自己相应的测试类。每种方法都有相应的测试方法。您应该编写足够的Robot功能来完成任何给定的RobotPrototype方法。如果没有,请停止。回到Robot并在那里编写函数方法
鉴于上述情况,需要考虑的要点是:

  • 您首先编写了完整的“核心”方法。完成后,每个方法都有工作测试

  • 在使用现有代码编写新代码时,您知道现有代码是有效的,因为它已经过测试。而且,您的新代码有自己的测试

  • 因此,您的应用程序是建立在经过测试的代码层之上的

  • 在编写和重写时,您不断地重新运行测试。并定期确保您重新运行所有这些程序。如果以前的工作测试失败,那么您知道您有问题,并且您知道首先应该看哪里

  • 尽可能地,每个类都有一个测试类,每个方法都有(至少一个)测试方法

我必须在Robot类本身中包含所有方法吗

我不明白这个问题。您已经说过您的测试在一个单独的项目中,并且您正在编写一个单独的客户端类
RobotPrototype
,它使用
Robot

在这一点上,这似乎是一个合理的设计

我认为你在为一些机器人类方法编写的每一个“工作”测试编写所有类的位,这让你感到困惑。这不是思考TDD的方式。这并不意味着编写一个失败的测试来创建一个Robot对象,然后编写一个Robot构造函数的shell,编写一个使用Robot的类的shell,编写一个使用RobotPrototype的客户端的shell。然后写一个失败的测试,然后wri