javascript - 在 javascript 上测试私有(private)成员

标签 javascript extendscript

我一直在 Adob​​e Extend Script Toolkit 上开发一个简单的项目,但在对私有(private)成员实现测试时遇到了问题。我提出了一个解决方案,即将回调中的私有(private)变量公开给特殊函数。我不确定这是否是一个好的模式。我需要建议。

模式如下:

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

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

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

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

最佳答案

作为一般规则:如果您需要测试私有(private)数据成员,您需要重新考虑您的操作方式。您应该测试给定一组输入,输出是否符合您的预期。这些输入应在面向公众的 API 中输入的同一位置输入。

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

参见this answer也是如此。

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

关于javascript - 在 javascript 上测试私有(private)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20916945/

相关文章:

javascript - 在 Node js 应用程序内的 Postgres 查询中转义单引号

javascript - 遍历复杂的嵌套 json 数组 javascript

adobe - app.doScript 和 $.evalFile 之间有什么区别?

javascript - 在 Extendscript (Photoshop Script) 中打开 pdf 帮助文件

javascript - 无法定位 Adob​​e ExtendScript Toolkit CC 中的应用程序

javascript - Adobe ExtendScript 中的 For 循环

JavaScript 将日期转换为格式

javascript - jQuery Sortable 无法与 Twitter 嵌入推文一起使用

javascript - 使用 jQuery 折叠时下拉列表显示不同?

javascript - 在扩展脚本中设置编辑文本的焦点