【问题标题】:100% code coverage, complaining about MoveNext()100% 的代码覆盖率,抱怨 MoveNext()
【发布时间】:2017-03-29 11:54:54
【问题描述】:

我正在努力实现 100% 的代码覆盖率。 然而,不知何故,代码覆盖抱怨某些 MoveNext() 方法未被覆盖,但是,没有代码路径正在迭代 IEnumerable...

任何想法如何覆盖 MoveNext 方法? MoveNext() 位于何处?

【问题讨论】:

  • 它与 async/await 代码有关 - MoveNext 是自动生成逻辑的一部分。出于兴趣,您使用的是什么代码覆盖工具,也许它不理解 async/await?
  • 注意类名。它显然是编译器生成的 IEnumerable。我猜你的代码覆盖工具不会费心去检查你写的代码是否应该被覆盖。但是,我发现尝试 100% 的代码覆盖率几乎没有用,除了小玩具项目。在任何更大的项目中,总会有一些你无法涵盖的陈述或表达。通常,这些只是保护throws 以防止永远不会发生的事情等。
  • @Joey 类名表明这是异步状态机,而不是 IEnumerable。好吧,也许它可能同时表明两者,但在这种情况下,我们从代码中看到它不是 IEnumerable。
  • 看看这个答案:stackoverflow.com/a/4047607/2420998。它显示了异步方法的生成代码。该答案中所谓的Step 也称为 MoveNext()。
  • 我认为他正在使用 Visual Studio 内置代码覆盖工具。它在测试菜单下。我不知道社区是否有它。 msdn.microsoft.com/en-us/library/dd537628.aspx

标签: c# unit-testing code-coverage


【解决方案1】:

老实说,我的经验是针对一个中等规模的团队尝试实现并保持 100% 代码覆盖率的经验,其中代码很好地遵循 SOLID 原则,您应该忘记尝试实现 100% 代码覆盖范围。

最佳实践表明,70% 覆盖率的系统非常好,80% 非常好,90% 非常好,这是有充分理由的。听起来你已经 90 多岁了,所以你很自豪,不要过分担心最后一块,从它的声音来看,它甚至没有测试你的代码库本身。或者换一种说法,您是宁愿达到 100% 的圣杯,还是花时间重构代码以使未来的维护更容易?

当我尝试保持 100% 的覆盖率时,我是 C# 的新手,并最终编写了单元测试来测试 .Net 框架的 getter 和 setter - 我认为我真的很聪明地达到了 100%(整整一周,直到有人在团队添加了几行超简单的代码),然后有人礼貌地指出了我的一些测试的愚蠢性——我觉得多么愚蠢。

我意识到我的“答案”实际上并没有回答你的问题,我开始这个回复是作为评论,而不是答案,但在我写作的时候,我意识到我的 cmets 是如此相关,即使没有直接回答问题仅仅是评论是不充分的解释。我真的很欣赏任何 100% 覆盖率的尝试,但不要为实现它而挂断 - “完成胜于完美”。

祝你好运!

【讨论】:

    【解决方案2】:

    对我有用的是在我的解决方案中排除 .runsettings 文件中的 MoveNext() 方法:

            <Functions>
              <Exclude>
                <Function>.*MoveNext.*</Function>
              </Exclude>
            </Functions>
    

    this related Stack Overflow post

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2017-03-30
      • 2023-03-21
      • 1970-01-01
      • 2011-06-15
      • 2012-06-30
      • 1970-01-01
      相关资源
      最近更新 更多