在单元测试中,您如何处理变量命名/赋值?

时间:2010-12-29 08:54:05

标签: c# java unit-testing testing

在单元测试中,我们多次遇到必须定义我们的方法所使用的变量的问题,其中它们的值并不重要。有时我们必须传入一个字符串,并检查输出是否是相同的字符串。或者也许是相同的字符串,但在大写。或者我们正在测试的方法不是获取该字符串,而是返回一个空字符串。

在这些情况下,您如何声明,命名和分配这些变量?

考虑上下文,例如,将HTML解析器作为输入的url:

string google = "http://google.com"

我告诉变量代表什么,但不是为什么我在测试环境中专门使用它(即,为什么我不使用雅虎?)。

string someUrl = "http://google.com";

这里我说它是“一些网址”,所以它可能对于测试目的并不重要。然而,我不得不选择一些网址。

string someUrl = SomeUrl(); // in this method I just return "http://google.com"

这里我说的是url并不重要,我将变量的值隐藏在方法中,可能不会分散测试的读者注意力不重要的细节。

我的推理是否正确?还有其他方法可以解决这个问题吗?

你如何在单元测试中处理这个问题?

4 个答案:

答案 0 :(得分:2)

您应该根据最清楚的内容为变量命名。单元测试可以被认为是测试脚本,它们不必像核心发布代码那样高效或优雅。

  

DEVENTER(n)一个非常难以做出的决定,因为它很少取决于它,例如在公园里走动的方式

     

- 道格拉斯亚当斯和约翰劳埃德对Liff的更深层含义。

答案 1 :(得分:2)

为变量命名,使其传达意图。

  • 如果变量值无关紧要,我将其命名为anyUrl = ...如果无关紧要,我可能也不会使用变量(除非内联值会影响可读性)
  • 如果由于某种原因变量值是特殊的并且它对当前测试有影响,那么我的名称将传达urlWithHyphens = ...。我还尝试用SCREAMING_CAPS(例如VALUE_OVER_THRESHOLD_OF_2_MINS)引入一个局部常量,仅用于强调。

与OO一样,好的名字是可读性和可维护性的一半。

答案 2 :(得分:1)

您可以选择自己喜欢的名字。这没关系!

因此,像someSomething这样的名字完全没问题,硬编码的测试值也很好。

我遵循的唯一惯例是选择值本身。我经常看到开发人员在思考几分钟,比如,firstName对象的lastNameUser应该是什么。解决方案是只使用一小组您自己使用的默认值。对我来说,如果是管理员用户,那肯定是查克诺里斯。这节省了您的时间,它使您的脚本更加一致,但即使这是可选的。 (但是,由于您选择的网址为http://www.google.com",因此您似乎已经这样做了。)

答案 3 :(得分:1)

如果我只在方法中使用一个URL,那么它就是var url。如果我使用更多,那么它是var url1,var url2或var urlGoogle,var urlYahoo。保持简短,仍然有意义,不要过多考虑它。