在javascript上测试私有成员
我一直在Adobe Extend Script Toolkit上做一个简单的项目,在私有成员上实现测试时遇到了问题。我提出了一个解决方案,将回调函数中的私有函数暴露给一个特殊函数。我不确定这是不是一个好的模式。我需要建议 模式如下:在javascript上测试私有成员,javascript,extendscript,Javascript,Extendscript,我一直在Adobe Extend Script Toolkit上做一个简单的项目,在私有成员上实现测试时遇到了问题。我提出了一个解决方案,将回调函数中的私有函数暴露给一个特殊函数。我不确定这是不是一个好的模式。我需要建议 模式如下: (function (global) { var Loader, Require, Modules; Require = 'Require Object'; Modules = 'Modules object'; Loader =
(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));
作为一般规则:如果您需要测试私有数据成员,您需要重新思考您的工作方式。您应该测试给定一组输入,输出是您期望的。这些输入应该在它们在面向公众的API中输入的相同位置输入 单元测试应该测试代码的公共接口。测试私有部分往往会导致脆弱的测试(当代码更改而不是结果更改时测试失败) 我也看到了 所以,直接回答你的问题:我不会说你的模式是好的。您不应该担心测试私有函数。测试行为,而不是方法。并非所有方法都需要测试