在单元测试中,我们多次遇到必须定义我们的方法所使用的变量的问题,其中它们的值并不重要。有时我们必须传入一个字符串,并检查输出是否是相同的字符串。或者也许是相同的字符串,但在大写。或者我们正在测试的方法不是获取该字符串,而是返回一个空字符串。
在这些情况下,您如何声明,命名和分配这些变量?
考虑上下文,例如,将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并不重要,我将变量的值隐藏在方法中,可能不会分散测试的读者注意力不重要的细节。
我的推理是否正确?还有其他方法可以解决这个问题吗?
你如何在单元测试中处理这个问题?
答案 0 :(得分:2)
您应该根据最清楚的内容为变量命名。单元测试可以被认为是测试脚本,它们不必像核心发布代码那样高效或优雅。
DEVENTER(n)一个非常难以做出的决定,因为它很少取决于它,例如在公园里走动的方式
- 道格拉斯亚当斯和约翰劳埃德对Liff的更深层含义。
答案 1 :(得分:2)
为变量命名,使其传达意图。
anyUrl = ...
如果无关紧要,我可能也不会使用变量(除非内联值会影响可读性)urlWithHyphens = ...
。我还尝试用SCREAMING_CAPS(例如VALUE_OVER_THRESHOLD_OF_2_MINS)引入一个局部常量,仅用于强调。与OO一样,好的名字是可读性和可维护性的一半。
答案 2 :(得分:1)
您可以选择自己喜欢的名字。这没关系!
因此,像someSomething
这样的名字完全没问题,硬编码的测试值也很好。
我遵循的唯一惯例是选择值本身。我经常看到开发人员在思考几分钟,比如,firstName
对象的lastName
和User
应该是什么。解决方案是只使用一小组您自己使用的默认值。对我来说,如果是管理员用户,那肯定是查克诺里斯。这节省了您的时间,它使您的脚本更加一致,但即使这是可选的。 (但是,由于您选择的网址为http://www.google.com"
,因此您似乎已经这样做了。)
答案 3 :(得分:1)
如果我只在方法中使用一个URL,那么它就是var url。如果我使用更多,那么它是var url1,var url2或var urlGoogle,var urlYahoo。保持简短,仍然有意义,不要过多考虑它。