【发布时间】: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