gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 04:07:17 24 4
gpt4 key购买 nike

在这里,我将通过一个例子来解释这个问题。原始问题更抽象地提出了问题。不过没必要读。
更新:以问题为例
假设我们已经实现了这个有问题的函数来查找 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/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com