【问题标题】:Unit testing redundant comparing values单元测试冗余比较值
【发布时间】:2013-02-15 16:25:45
【问题描述】:

我在单元测试中遇到了这种奇怪的情况,当我必须检查不能手动创建的返回值的函数(值)时。事实上,这个函数是为创建这个值而设计的。所以像这样测试(javascript和QUnit框架):

asyncTest("UTF-8 - ArrayBuffer conversion", 1, function() {
    var arrayBuffer;
    var testUtf8 = "łużyński";
    var blob = new Blob([testUtf8]);
    var f = new FileReader();
    f.onload = function(e) {
        arrayBuffer = e.target.result;
        start();
    };
    equal(utf8ToArrayBuffer(testUtf8), arrayBuffer, "UTF-8 to ArrayBuffer, OK!");
});

是多余的,因为准备arrayBuffer变量与返回值进行比较实际上与使用utf8ToArrayBuffer(testUtf8)相同,所以测试看起来像这样:

equal(utf8ToArrayBuffer(testUtf8), utf8ToArrayBuffer(testUtf8), "UTF-8 to ArrayBuffer, OK!");

我应该测试这样的东西还是放弃它?或者也许有另一种方法?

【问题讨论】:

    标签: javascript unit-testing qunit redundancy


    【解决方案1】:

    您不应该测试两个相等的函数调用是否返回相同的结果。您应该测试函数调用的结果是否符合您的预期。在您的情况下,这意味着您有一个值 ("łużyński") 作为输入,并且您得到一个数组缓冲区作为输出。您可以测试输入值是否实际包含在输出中。

    但是如果没有要测试的函数代码 (utf8ToArrayBuffer()),很难说你到底可以测试什么。

    【讨论】:

    • 好吧,我写道,准备比较的值与我正在测试的函数相同。但是,实现并不重要,因为这是 TDD,我必须先编写测试。我现在只知道utf8ToArrayBuffer(testUtf8) 必须返回 arrayBuffer 并转换我的值。现在我必须以某种方式检查返回值是否正常。我可以将此 arrayBuffer 转换回文本,但随后我将不得不使用另一个函数 arrayBufferToUtf8,它与测试有相同的问题。所以这就像冗余的交叉测试。
    • 对我来说这很有意义,因为这两个函数的代码可以独立更改。但由于它是一个很小的功能,您不必担心。如果你想测试的不仅仅是返回值,你可以考虑使用一个模拟,看看它是否被正确地操纵。
    猜你喜欢
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    相关资源
    最近更新 更多