Pex忽略默认参数分配

时间:2015-09-16 09:47:35

标签: visual-studio pex pex-and-moles

我正在使用Pex来分析函数执行。 但是,我注意到没有查看默认参数。

这是我的意思的一个例子:

public int bla(int x = 2)
{
    return x * 2;
}

当我运行Pex时,它会为int result = bla(0);生成测试用例。 (x = 0
有没有办法告诉Pex它还应该尝试在没有参数的情况下调用bla((即int result = bla())?

1 个答案:

答案 0 :(得分:1)

IntelliTest / Pex的第一条规则是尝试增加代码覆盖率。 如果所有陈述都已涵盖,Pex将停止。

有很多方法可以添加一些只在x = 2时才会被覆盖的代码,例如在测试方法中。这对我来说可能是最简单的:

    [PexMethod]
    public int bla([PexAssumeUnderTest]Class1 target, int x)
    {
        if(x == 2)
        {
            PexAssert.ReachEventually();
        }
        int result = target.bla(x);
        return result;
        // TODO: add assertions to method Class1Test.bla(Class1, Int32)
    }

探索结果窗口应显示:

    x      result
    0      0
    2      4

我不知道Pex是否会自动为所有默认参数生成测试用例。

在现实生产代码中,很可能会在代码中使用默认值,因此您可能不会经常遇到此问题。

如果您拥有Pex所涵盖的所有代码路径,那么是否使用默认值真的很重要吗?

测试使用和不提供值调用'bla'的方法可能更为重要。