假设有以下类
class Observable() {
constructor() { this._cbs = []; }
on(cb) {
this._cbs.push(cb);
}
off(cb) {
this._cbs.splice(this._cbs.indexOf(cb));
}
trigger() {
this._cbs.forEach((cb) => cb());
}
}
我应该如何对 on
方法进行单元测试。现在我可以检查 this._cbs
数组并简单地验证回调是否已推送到它上面。但如果我这样做,我就会将实现知识应用到我的测试中。或者我可以监视回调并调用 trigger
并检查回调是否被调用。但是,这不是集成测试。
那么一般来说,只有内部效果的单元测试函数的方法是什么?
最佳答案
我认为,如果您的方法仅更改内部状态,则验证这一点的唯一方法是通过可公开访问的方法(例如,如果您的类有一个 .count()
函数,您可以在之后检查该函数.)
如果没有外部机制来验证内部操作,就很难检查。
有时在 C# 中,如果这确实是重要的逻辑,我会使用 [InternalsVisibleTo]
属性来检查(在您的情况下为 _cbs
)类的内部状态.
或者,如果这不是非常重要的功能,那么知道调用了一个函数就足够了。因此,在该示例中,您可以提供一个模拟的 _cbs
作为参数,并检查是否调用了 .push()
。
关于javascript - 如何对仅更改内部状态的函数进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38874551/