unit-testing - 在哪里为 Intellites 生成的每个测试添加断言

标签 unit-testing visual-studio-2015 assertions intellitest

在这里,我将通过一个例子来解释这个问题。原始问题更抽象地提出了问题。不过没必要读。
更新:以问题为例
假设我们已经实现了这个有问题的函数来查找 int[] 的最小值:

public int MyMin(int[] data)
{
    int min = 1000;

    for (int i = 1; i < data.Length; i++)
    {
        if (data[i] < min)
        {
            min = data[i];
        }
    }

    return min;
}
在这个函数上运行 Intellitetest 给我们:
enter image description here
请注意测试 #4 和 #6,由于其执行错误,该函数无法正确计算最小值。然而,这些测试正在通过,这是不希望的。
Intellitest 无法神奇地确定我们对 MyMin 的预期行为并制作测试以在这些输入上失败。但是,如果我们可以为这些测试手动指定所需的结果,那就太好了。
@michał-komorowski 的解决方案是可行的,但对于每个测试用例,我必须根据 PexAssume 重复其输入s。是否有更优雅/干净的方法来为测试输入指定所需的输出?
原始问题
Intelitest 生成一个可修改的参数化测试,并且可以在那里添加通用/全局断言。它还生成最小数量的输入以最大化代码覆盖率。 Intellitest 将输入存储为单独的单元测试,每个单元测试都使用精心设计的输入调用参数化测试。
我正在寻找一种方法来为每个输入添加断言。
由于每个输入都作为单元测试函数存储在 中.g.cs 文件,断言可以添加到那里。问题是这些函数不应该由用户自定义,因为它们会在随后的运行中被 Intellitetest 覆盖。
为每个单元测试添加断言的推荐方法是什么?

最佳答案

您不应向测试方法(具有 [TestMethod] 属性的方法)添加断言。它们仅用于提供参数值。放置断言的地方是带有 [PexMethod] 的方法属性。

乍一看,它可能看起来像一个限制。但是,如果我们考虑 IntelliTest 的工作方式,则并非如此。为每个输入添加断言是没有意义的,因为输入可以随时删除、更新或创建。例如,当:

  • 正在测试的方法已更改。
  • PexAssume类被使用。
  • PexMethod的配置属性已更改。

  • 但是,您可以做其他事情,即为正在测试的方法添加多个“Pex 方法”并使用 PexAssume .例如,假设我们有 BubbleSort方法,我们想根据输入数组的长度定义不同的断言。
    [PexMethod]
    public void BubbleSort(int[] a)
    {
        PexAssume.IsTrue(a.Length == 5);
        int[] result = Program.BubbleSort(a);
        // Assertions specific for an array with 5 elements
    }
    
    [PexMethod]
    public void BubbleSort(int[] a)
    {
        PexAssume.IsTrue(a.Length == 10);
        int[] result = Program.BubbleSort(a);
        // Assertions specific for an array with 10 elements
    }
    

    关于unit-testing - 在哪里为 Intellites 生成的每个测试添加断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35284863/

    相关文章:

    python - 在派生类中重写assertEqual时出现类型错误

    visual-c++ - Windows Web 服务框架中的 Visual Studio 2015 无法识别的错误

    c# - Debugger::HandleIPCEvent 在特定断点处中断时的视觉未处理异常

    python - 有没有办法配置 Python 日志记录来记录断言失败的内容或上下文?

    测试控制台命令时的 Symfony 模拟服务

    c# - 使用静态记录器、静态帮助程序类进行依赖注入(inject)

    php - 有哪些框架/工具/技术可以帮助从 PHP 运行 javascript?

    c# - 无法在 Windows 10 通用应用程序中接收推送通知

    javascript - 如何使用 Chai 检查对象中的值?

    java - Eclipse:启用断言