在javascript上测试私有成员

时间:2014-01-04 04:36:32

标签: javascript extendscript

我一直致力于一个关于Adobe Extend Script Toolkit的简单项目,并且无法在私有成员上实施测试。我想出了一个解决方案,它将一个回调内的私有暴露给一个特殊的函数。我不确定这是不是一个好的模式。我需要建议。

继承人的模式:

(function (global) {
    var Loader, Require, Modules;

    Require = 'Require Object';
    Modules = 'Modules object';
    Loader = {};

    global.estk = global.estk || {};
    global.estk.loader = Loader;

    // This MUST be used for testing purposes only.
    // Use this to test for private members.
    global.estk.loader.__test__ = function (callback) {
        callback.call(this, {
            Require: Require,
            Modules: Modules,
            Loader: Loader
        });
    };
}($.global));

在我的测试文件中,我可以像这样调用暴露的私有文件:

(function(global) {
    #include '../estk/loader.jsxinc';

    estk.loader.__test__(function (obj) {
        $.writeln(obj.Require);
        $.writeln(obj.Modules);
        $.writeln(obj.Loader);
    });
}($.global));

1 个答案:

答案 0 :(得分:1)

作为一般规则:如果您需要测试私有数据成员,则需要重新考虑您的工作方式。您应该测试给定一组输入,输出是您所期望的。这些输入应该输入他们在面向公众的API中输入的相同位置。

单元测试应测试代码的公共接口。测试私有部分往往会导致脆弱的测试(测试在代码更改时失败但不会导致结果)。

同样请参阅this answer

所以,直接回答你的问题:我不会说你的模式很好。您不必担心测试私有函数。测试行为,而不是方法。并非每种方法都需要测试。