测试类 - 什么时候重构?

时间:2011-09-09 07:06:46

标签: c# unit-testing nunit automated-tests

我正在使用NUnit和Selenium在C#中编写一系列自动测试。

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

我的问题是:

我的考试成绩有多大? (即成千上万的测试?)

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

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

1 个答案:

答案 0 :(得分:6)

  

我的考试成绩有多大? (即成千上万的测试?)

是的。测试需要长期维护,并且难以理解和维护庞大的测试类。

  

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

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

我最近不得不使用这样的测试类,最后​​我对它进行了分区,所以现在我有几个测试类,每个测试类测试一个特定类*的特定方法/用例。我设法将一些旧的测试转换为参数化测试,并将所有新测试编写为参数化测试。我发现参数化测试可以更容易地查看大图,并立即记住所有测试用例。我在Java项目中使用JUnit做到了这一点,但是我看到NUnit 2.5现在也提供参数化测试 - 你应该检查它。

*如果我们需要这么多测试用例来覆盖它,你可以正确地问,不应该对被测试的类进行重构 - 是的,最终应该这样做。它是我们遗留应用程序中最大的类,其中包含太多内容。但首先我们需要测试用例:-)顺便说一句,这可能也适用于你的课程 - 如果你需要这么多测试用例来覆盖它,可能是被测试的课程只是试图做太多,你最好将它的一些功能提取到一个单独的类中,并使用自己的单元测试。