2011-09-09 55 views
2

我正在用C编写一系列使用NUnit和Selenium的自动测试。测试类 - 何时重构?

编辑:我正在测试整个网站,我开始为使用网站的三种类型的成员编写了三个类,这些类包含使用硒来执行这些成员执行各种操作的方法。然后创建这些类,并使用适当的输入由我的测试类来调用它们的方法。

我的问题是:

难道我的测试类变得有多大? (即数千次测试?)

什么时候重构我的功能类? (25或50个方法,1000行代码等)

我一直在努力阅读所有我可以关于测试设计,所以如果你有任何好的资源,我会感激链接。

+0

如果测试下的类不是具有数千行代码的God-class/Super-class,我无法想象为什么为这个类提供了如此大的测试集,是否真的需要这么多的测试?也许你需要在测试下重构类,所以测试类也将被简化。 – sll

+0

我已经编辑,以澄清我没有执行单元测试,但测试整个网站。 – FooBar

+0

这并不重要,当你编写测试时,你也应该遵循常规的开发指南和原则,所以你不能创建这样的大类,应该有某种责任和关注的分离 – sll

回答

6

难道我的测试类变得有多大? (即数千次测试?)

是的。测试需要长期维护,而一个巨大的测试课很难理解和维护。

什么时候重构我的功能类? (25或50种方法,1000行代码等)

当您开始觉得找到特定测试用例或浏览与特定场景相关的测试时很尴尬。我认为这里没有硬性限制,正如对生产类别的大小或方法的数量没有硬性限制一样。我个人认为测试代码的限制高于生产代码的限制,因为测试代码往往更简单,所以开始变得难以理解的阈值更高。但总的来说,拥有50种测试方法的1000线测试课对我来说开始感觉太大了。

我最近不得不使用这样一个测试类,并且最终对它进行了分区,所以现在我有几个测试类,每个测试类都测试一个特定类的特定方法/用例*。我设法将一些旧测试转换为参数化测试,并将所有新测试写为参数化测试。我发现参数化测试可以更加轻松地查看大图,并且一次性记住所有测试用例。我在一个Java项目上使用JUnit做了这个,但是我看到NUnit 2.5现在也提供了参数化测试 - 您应该检查它。

*如果我们需要这么多的测试用例来覆盖它,那么你最好可以正确地问被测试的类是否应该被重构。这是我们传统应用程序中最大的一类,其中有太多东西。但首先我们需要测试用例到位:-)顺便说一句,这也可能适用于你的类 - 如果你需要这么多的测试用例来覆盖它,可能被测试的类只是试图做太多,你最好将它的一些功能提取到一个单独的类中,并使用它自己的单元测试。

+0

我实际上并不知道参数化测试是什么,并且在阅读定义时我意识到我已经完成了测试类的测试,这就是为什么我有一个独立的测试类来调用它们。 – FooBar

+0

测试类测试一个网站的功能,这就是为什么他们正在成长,我会听取你的意见,并在他们成长时重构它们。 – FooBar