【问题标题】:What are factors for coverage And Is there any Algorithm for calculating coverage?覆盖率的因素是什么?是否有计算覆盖率的算法?
【发布时间】:2016-05-31 20:29:31
【问题描述】:

我正在为 Angular(使用 Jasmine 框架和 Karma)编写单元测试用例来运行测试用例。我需要使用 Coverage-html(Istanbul) 来覆盖代码。

有不同类型的覆盖:

  1. 功能。
  2. 分支机构
  3. 声明
  4. 已忽略(使用伊斯坦布尔我们可以忽略)。

请说明编写单元测试用例时需要注意的不同类型的覆盖率和基本因素:

function setCookie(sessionId) {
    if(sessionId) {
        setCookie('sessionId', sessionId, 21600);
    } else {
        setCookie('sessionId', session.getId(), 21600);
    }
}

我为此编写了测试用例:

describe('setCookie()', function(){
    it('should be set a cookie without expiration days', function() {
        var defered =$q.defer();
        spyOn(sessionCard, 'setCookie').andCallFake(function(){
              return defered.promise;
        })
        sessionCard.setCookie('sessionId', 'sessionId');
        expect(document.cookie).toBeDefined();
        expect(document.cookie).toBeTruthy();
    });
})  

【问题讨论】:

  • 分支覆盖意味着你已经覆盖了所有可能的情况。例如 if(x === true){do this}else{do that} 有两个分支,一个 x 为真,一个不为真。如果你为此编写一个 x 为真的测试,那么你将有 50% 的分支覆盖率。

标签: javascript angularjs jasmine karma-jasmine istanbul


【解决方案1】:

在编写单元测试时,你提到的覆盖类型是必要的,但它永远不能保证你已经覆盖了你的代码。

每个函数都有多种场景编写测试。

  1. 所有语句至少涵盖一次
  2. 涵盖所有快乐路径场景
  3. 涵盖所有故障安全条件(负面情况/即异常块)

如果涵盖了上述场景,您可以放心地假设您的功能已经过全面测试。 只要确保你的测试依赖于输出而不是特定的变量。

【讨论】:

  • Taj,我完全同意你的回答。但是当我覆盖了我的测试代码(100% 即函数和语句)时。分支的覆盖率仍然是 55%.. 我不明白这背后的算法..
  • 首先你的代码不能被 100% 测试,除非你覆盖了所有的分支。您的覆盖率配置可能有些问题,因为您必须覆盖所有语句+所有分支才能使整体覆盖率达到 100%
  • 如果你觉得有帮助,你可以接受答案:)
猜你喜欢
  • 1970-01-01
  • 2020-02-12
  • 2021-04-04
  • 1970-01-01
  • 1970-01-01
  • 2011-03-06
  • 1970-01-01
  • 2014-10-18
  • 2017-01-03
相关资源
最近更新 更多