【问题标题】:Unit Testing - Mock Methods within Methods?单元测试 - 方法中的模拟方法?
【发布时间】:2015-12-09 15:05:40
【问题描述】:

我正在为 Node.js 应用程序编写单元测试,我想知道我是否在模拟代码的正确部分。

下面的例子是一个有两个静态方法的假设类。

方法isTokenValid 调用另一个方法decodeToken,它接受令牌和回调。回调在isTokenValid 内部定义。这两个方法属于同一个类。

当对isTokenValid 进行单元测试时,我的方法是模拟decodeToken 方法。

我很清楚,在进行单元测试时,应该模拟 AJAX 请求等依赖项。但是,对于这种类型的依赖,这是否也适用,还是我太细化了?

模拟decodeToken 是单元测试isTokenValid 的正确方法吗?

var TokenClass = {};

TokenClass.isTokenValid(token) {
    TokenClass.decodeToken(token, function(err, decoded) {
            if (err) {
                console.log('There was a validation error');
            }
            if (decoded) {
                return true
            };
        }
    }

    TokenClass.decodeToken(token, callback) {
        // some logic here to decode token
        if (err) {
            return callback(err);
        }
        // if token is not valid
        if (!validToken) {
            return callback(null, undefined);
        }
        // if token is valid
        return callback(null, decoded);
    }
}

【问题讨论】:

    标签: javascript node.js unit-testing testing


    【解决方案1】:

    有两种方法。

    在经典单元测试中,您可以模拟测试单元外部的所有内容 - 在这种情况下,isTokenValid 方法是您的单元。但这种方法并不实用。

    最好的方法是模拟不会让您的测试以孤立和确定的方式运行的东西(每次都相同的结果)。

    如果decodeToken 没有调用任何外部资源(url、数据库、文件系统),那么您不必模拟它。但是,如果它确实调用了外部资源,那么decodeToken 应该在另一个对象中实现,即TokenDecoder 并注入TokenValidator,然后对于TokenValidator 的单元测试,您可以注入不调用任何的模拟TokenDecoder外部资源。

    TokenDecoder 然后应该使用集成测试进行测试,但这是另一个主题。

    【讨论】:

      猜你喜欢
      • 2014-04-16
      • 2015-10-21
      • 1970-01-01
      • 1970-01-01
      • 2014-06-07
      • 1970-01-01
      • 2019-09-14
      • 1970-01-01
      • 2018-04-02
      相关资源
      最近更新 更多