【问题标题】:Testing Classes - When to refactor?测试类——什么时候重构?
【发布时间】:2011-09-09 07:06:45
【问题描述】:

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

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

我的问题是:

我的测试班有多大重要吗? (即数千次测试?)

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

我一直在努力阅读有关测试设计的所有内容,因此,如果您有任何好的资源,我将不胜感激。

【问题讨论】:

  • 如果一个被测试的类不是拥有数千行代码的神级/超类,我无法想象你为什么要为提到的类设置如此大的测试集,真的吗?需要这么多的测试?也许您需要在测试下重构类,以便简化测试类
  • 我进行了编辑以澄清我不是在执行单元测试,而是在测试整个网站。
  • 这个没关系,写测试的时候也应该遵循常规的开发指南和原则,所以不能创建这么大的类,应该有某种责任和关注的分离
  • 非常好,那么当它们变得太大时,我会将它们重构为更小的专业类。谢谢你的建议。

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


【解决方案1】:

我的测试班有多大重要吗? (即数千次测试?)

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

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

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

我最近不得不使用这样一个测试类,我最终对它进行了分区,所以现在我有几个测试类,每个测试一个特定的方法/特定类的用例*。我设法将一些旧测试转换为参数化测试,并且所有新测试都编写为参数化测试。我发现参数化测试可以更轻松地查看全局,并同时记住所有测试用例。我在 Java 项目中使用 JUnit 完成了这项工作,但我看到 NUnit 2.5 现在也提供参数化测试 - 你应该检查一下。

*你可能会问,如果我们需要这么多测试用例来覆盖被测类,是否应该重构它——是的,它最终应该被重构。它是我们遗留应用程序中最大的一个类,里面的东西太多了。但首先我们需要准备好测试用例 :-) 顺便说一句,这也可能适用于您的课程 - 如果您需要这么多测试用例来涵盖它,可能是被测课程只是试图做太多事情,你最好将它的一些功能提取到一个单独的类中,并使用它自己的单元测试。

【讨论】:

  • 我实际上不知道什么是参数化测试,在阅读定义后我意识到我已经用我的测试类做到了这一点,这就是为什么我有一个单独的测试类来调用它们。跨度>
  • 测试类测试网站的功能,这就是它们不断发展的原因,我会采纳您的建议并随着它们的发展对其进行重构。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-26
  • 1970-01-01
  • 1970-01-01
  • 2014-04-26
  • 2020-03-05
相关资源
最近更新 更多