Visual studio 2013 C Visual Studio 2013部分线路覆盖率误报
IDE:Visual Studio Ultimate 2013。 语言:C 操作系统:Windows 8 Visual Studio代码覆盖率将我的一行代码标记为部分覆盖,而我认为它在处理&&运算符时不应该部分覆盖。我简化了逻辑来证明这个问题 考虑以下测试功能:Visual studio 2013 C Visual Studio 2013部分线路覆盖率误报,visual-studio-2013,code-coverage,Visual Studio 2013,Code Coverage,IDE:Visual Studio Ultimate 2013。 语言:C 操作系统:Windows 8 Visual Studio代码覆盖率将我的一行代码标记为部分覆盖,而我认为它在处理&&运算符时不应该部分覆盖。我简化了逻辑来证明这个问题 考虑以下测试功能: public static bool test(bool a, bool b) { if (a && b) // Subject Line { return true; }
public static bool test(bool a, bool b)
{
if (a && b) // Subject Line
{
return true;
}
return false;
}
现在考虑下面的测试代码:
test(true, true);
Visual studio将报告部分涵盖的主题行。我希望它只被标记为testfalse、true或testfalse、false案例的部分。我可以使用以下序列将其标记为已覆盖:
test(true, true);
test(false, true);
或
我进一步简化了这个问题。以下主题行标记为部分:
bool a = true;
bool b = true;
if (a && b){} // Subject line
以下主题行标记为已覆盖:
bool b = true;
if (true && b){} // Subject line
有人知道发生了什么吗?返回false不会被命中。这里有一个替代方案,其中涵盖了每一行
public static bool test(bool a, bool b)
{
return (a && b);
}
听起来是个好问题,很酷。它不是逐行的,而是通过if语句的真正不同的路径。如果您尝试所有4种条件,您将获得100%的保险。我将在native中尝试这一点。native说它的100%代码覆盖率为true。我猜这是因为这是后来添加的。这篇文章解释了更多的原因。
public static bool test(bool a, bool b)
{
return (a && b);
}