Visual studio 2013 C Visual Studio 2013部分线路覆盖率误报

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; }

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;
    }
    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);
}