QUnit模型,测试和断言命名约定

时间:2013-07-24 22:21:48

标签: naming-conventions qunit

我正在为我的JavaScript网络应用编写QUnit测试。在阅读QUnit API documentation之后,我无法找到标记模块,测试和断言的任何标准。

API描述和示例非常简陋:

  

模块名称:此组测试的标签。示例:module("group a");

     

测试标题:正在测试的单元的标题。示例:test("hello test", function(){});

     

断言消息:断言的简短描述。示例:ok(true, "true succeeds");

我在那里找到了关于整体单元测试的文章:What are some popular naming conventions for Unit Tests?Unit test naming best practices

然而,我希望有一个已建立/普遍接受的标准,该标准特定于QUnit的Module-> Test-> Assert模式。有没有?

1 个答案:

答案 0 :(得分:1)

无论您使用的测试框架如何,无论您是编写客户端还是服务器端单元测试,采用一些“名称约定”的主要关注点是确保测试名称清楚地向每个人说明什么是系统和正在测试的行为。

我们假设我们要测试这段代码:

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 () {});

这样每个测试都有一个明确的目的,它们将根据需要保持尽可能小,当一个测试失败时,很容易理解代码的哪些部分受到最新更改的影响。

良好的标准是团队中所有成员都同意的标准,它将帮助每个人找到并解决错误,并帮助他们编写更好的单元测试。