【问题标题】:Pex ignores default parameter assignmentPex 忽略默认参数分配
【发布时间】:2015-09-16 09:47:34
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案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”的方法可能更重要。

    【讨论】:

    • 你说得对,毕竟这无关紧要,但是,我可以想到可能很重要的场景(代码更改、不断更改、糟糕的编程等)。 ReachEventually() 似乎是一个很好的解决方案来解决这个问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多