无论您使用的测试框架如何,无论您是在编写客户端还是服务器端单元测试,采用某种“名称约定”的主要关注点都是为了确保测试名称清楚地向所有人说明什么是系统和被测试的行为。
假设我们要测试的这款代码:
var MyClass = (function() {
function MyClass() {
this.defaultMessage = "Hello person without a name";
}
MyClass.prototype.getHelloMessage = function (firstName, lastName) {
if (!firstName && !lastName) {
return this.defaultMessage;
}
var message = "Hello";
if (lastName) {
message += " " + lastName;
}
if (firstName) {
if (lastName) {
message += ",";
}
message += " " + firstName;
}
return message;
};
return MyClass;
})();
上面的代码只是格式化一个简单的信息与给定的输入参数,如果有的话,如果没有指定参数,返回一个默认的消息。
对我来说,模块名称将是类名和一个分离器,使测试名称列表可读性更强:
QUnit.module("MyClass tests - ");
人们可以简单的名称测试:
test("getHelloMessage test", function() {}
,并断言所有的期望在一个文本中。
我更喜欢一个更详细的方法,这将是清楚了解每个测试的目的:
test("getHelloMessage without input parameters should return default message", function() {});
test("getHelloMessage with only lastName should not display a comma", function() {});
test("getHelloMessage with only firstName should not display a comma", function() {});
这样,每个测试有一个明确的目的,根据需要,他们将保留作为小,而当一次测试失败,很容易理解代码中哪些部分受到最新更改的影响。
好的标准是你所在团队的所有成员都同意这将帮助每个人找到并解决错误,并帮助他们编写更好的单元测试。
非常感谢@Justin的代码格式。 我没有看到那些阻止格式化的隐藏字符,但是您在那里发现了它们! :-) – jfoliveira