c# - AutoFixture 和 XUnit2 - 结合 TheoryData 和 AutoData

标签 c# unit-testing testing xunit autofixture

在我当前正在编写的测试中,我需要将特定于测试的数据与随机条目混合在一起,理想情况下我希望 AutoFixture 生成这些数据。 我正在使用 TheoryData 创建特定于测试的数据集:

internal sealed class TestSpecificData : TheoryData<int, string>
{
    // Addition of test cases input.
}

在我的 XUnit2 测试用例中,我想执行以下操作:

[Theory]
[AutoData]
[ClassData(TestSpecificData)]
public void MyTestCase(int first, string second, double third)
{
    // Test scenario.
}

在上面的测试用例中,我希望 AutoFixture 仅生成最后一个参数:“doublethird”,并使用 TestSpecificData 理论数据中可用的数据作为前两个参数。 尝试运行上面的代码会导致 InvalidOperationException 并显示以下消息:

"The test method expected 3 parameter values, but 2 parameter values were provided."

我知道我可以使用 InlineAutoData 属性,但是有很多特定于测试的条目,这不是一个理想的解决方案,因为我必须为每种情况声明一个单独的 InlineAutoData。此外,我想在不同的测试用例中重用测试条目,所以这就是我尝试使用 TheoryData 的原因。 我还尝试创建一个继承自 AutoDataAttribute 的自定义 AutoFixture 属性,但我似乎无法使其像我希望的那样工作。 如果有任何建议或不同的解决方案能够帮助我实现预期的结果,我将不胜感激。

谢谢!

最佳答案

在寻找这个时,我发现 a workaround for MemberAutoDataAttribute 。经过轻微修改(将 MemberDataAttribute 替换为 ClassDataAttribute),我们就可以使用它了。

要创建具有自定义功能的属性,我然后从 ClassDataAttribute 派生,例如:

public class MyTypeClassAutoMoqDataAttribute : ClassAutoDataAttribute
{
    public MyTypeClassAutoMoqDataAttribute(Type @class)
        : base(@class,
            () => new Fixture()
                .Customize(new AutoMoqCustomization())
                .Customize(new MyTypeCustomization()))
    {
    }
}

关于c# - AutoFixture 和 XUnit2 - 结合 TheoryData 和 AutoData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67884815/

相关文章:

c# - Linq解析html字符串

c# - NHibernate回滚似乎不起作用

unit-testing - 单元测试 - 如何测试返回随机输出的函数?

unit-testing - 在测试抛出的异常时,我应该测试多少异常?

android - Unresolved reference : DaggerTestComponent (Kotlin with Dagger for Test)

带参数的 Django urls.reverse

testing - "Can' t 打开 perl 脚本 "t/spec/fudgeall": File or directory not found"

c# - Linq关键字提取——限制提取范围

testing - 如何从 "main()"测试 "go test"例程?

c# - 已引发 Azure MobileServiceInvalidOperation 异常