Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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
Unit testing 稍后编写单元测试_Unit Testing_Tdd - Fatal编程技术网

Unit testing 稍后编写单元测试

Unit testing 稍后编写单元测试,unit-testing,tdd,Unit Testing,Tdd,我知道TDD风格是先编写测试,看到它失败,然后去把它变成绿色,这是很好的东西。有时候它真的对我有用 然而,特别是当我在试验一些东西(例如,不确定设计,不确定它是否能工作)或疯狂地编写代码时,我不想编写单元测试,这会破坏我的流程 我倾向于稍后编写单元测试,尤其是在事情变得太复杂之前。另外还有一个问题,就是以后再写通常更无聊 我不太确定这是否是一个好方法(肯定不是最好的) 你觉得怎么样?您是否稍后编写单元测试代码?或者你是如何处理这个流问题或者实验设计/代码阶段的。我已经在事后编写了测试。迟做总比不

我知道TDD风格是先编写测试,看到它失败,然后去把它变成绿色,这是很好的东西。有时候它真的对我有用

然而,特别是当我在试验一些东西(例如,不确定设计,不确定它是否能工作)或疯狂地编写代码时,我不想编写单元测试,这会破坏我的流程

我倾向于稍后编写单元测试,尤其是在事情变得太复杂之前。另外还有一个问题,就是以后再写通常更无聊

我不太确定这是否是一个好方法(肯定不是最好的)


你觉得怎么样?您是否稍后编写单元测试代码?或者你是如何处理这个流问题或者实验设计/代码阶段的。

我已经在事后编写了测试。迟做总比不做强。它们总是值得拥有的

然而,我不得不说,在编写测试代码之前,我第一次编写它们时,它非常令人满意。不要再摆弄手工测试了。我很惊讶这感觉有多好


此外,我倾向于在重构遗留代码之前编写单元测试——这几乎从定义上来说,意味着我编写测试是为了测试已经编写的代码。提供了一个安全保护毯,使我能够更轻松地进入他人编写的大块代码。

我通常采用与您所说的相同的方法。看起来效果不错的方法是将练习代码完全照此处理,然后根据所学内容开始适当的设计。在这里,您可以先编写测试。否则,您将留下大量临时或实验性编写的代码,可能无法为所有代码编写测试。

VS 2008有一个很好的功能,可以为对象生成测试类,测试需要调整,但它为您带来了大量繁重的工作。它真的很适合为你不那么勤奋的同事做测试

另一个好处是,它有助于防止您在编写非您的代码时遗漏某些内容

如果您使用不同的测试框架,然后是MSUnitTest,那么将MSUnit测试转换为Nunit测试是相当简单的,等等。只需做一些复制和过去

“我不确定这是否是一个好方法(肯定不是最好的)。”

不好?为什么不呢

你是为可测试性而设计的吗?在这种情况下,您的设计是测试驱动的。任何人还能要求什么

测试是否先行,中间还是最后与测试性设计无关。最终,对设计的更改将导致测试失败,您可以修复问题。预期设计变更而对测试进行的更改也会导致测试失败。两者都很好


如果你的设计工作结束了,中间有一些难以测试的东西,那么你就不能做TDD了。您必须重构设计以使其可测试。

当您试图弄清楚代码将如何工作时,首先编写代码是很自然的。首先编写测试有助于确定代码显示的功能(而不是它应该如何执行)。如果您首先编写代码,那么您试图在不完全定义问题的情况下解决问题。这不一定是“坏”的,但您使用单元测试作为回归工具而不是开发工具(同样,不是“坏”——只是不是TDD)。

我学到的是,没有实验代码,至少在生产环境和/或紧迫的期限内不工作。实验通常会一直进行,直到某个东西“起作用”成为生产代码


另一方面,TDD从一开始就可以更好地设计代码。与事后编写测试相比,您将更频繁地考虑、修改和重构它。

我想说,对于正常的开发,TDD工作得非常好。有些情况下,您可能不需要先编写测试(甚至根本不需要),但这些情况并不常见。然而,有时候,你需要做一些探索,看看什么会起作用。我认为这是一个“尖峰”,我不一定认为TDD在这种情况下是绝对必要的。我可能不会在我的项目中使用实际的“spike”代码。毕竟,这只是一个探索,现在我对它应该如何工作有了更好的想法,我可能可以编写比我的“spike”代码更好的代码(和测试)。如果我决定使用我的“spike”代码,我可能会回去为它编写测试


现在,如果您发现您违反了TDD,并且在测试之前编写了一些生产代码,那么我也会回去编写测试。事实上,当这种情况发生在我身上的时候,我经常会发现,一旦我开始编写测试,我就会忽略一些事情,因为我会想到更多的测试不是由代码处理的。最终,你会回到TDD Rydym(并发誓再也不会那样做)。

我通常先编写测试,但有时在实验时,我会在之后编写代码。一旦我知道我的代码应该做什么,我就会停止代码并开始测试

我想说的是,我总是先编写单元测试,但我当然不这样做(因为许多真正的程序员都知道的原因:-))。我所做的(好的,也不总是…)是将我花了五分钟以上找到的每一个bug转换成一个单元测试。甚至在我修好它之前。这有以下优点:

  • 它记录了这个bug,并在以后某个时候再次出现时提醒我
  • 它有助于发现bug,因为在发现单元测试之前,我有一个定义良好的地方来放置调试代码(设置我的数据结构、调用正确的方法、设置断点等)。我修改了此测试代码的main()函数,导致奇怪的结果