【问题标题】:Can AutoFixture be used to generate multiple test cases?AutoFixture 可以用来生成多个测试用例吗?
【发布时间】:2019-08-12 14:32:54
【问题描述】:

我已经开始尝试使用 AutoFixture。在我的研究中,我发现有这个InlineAutoDataAttribute 可以用来生成具有不同输入参数的多个测试用例(给定一些要求)。但是,InlineAttribute 和类似的 InlineAutoDataAttribute 只能与编译 const 数据一起使用。所以我去找MemberAutoDataAttribute 之类的东西,因为MemberDataAttribute 可以让我输入一组非“编译时常量”对象,比如Exception 实例的集合。遗憾的是,这个属性不存在。

有什么方法可以让我重用使用 AutoFixture 的测试,以便它可以生成多个测试用例?这可以通过一些ICustomization 实现来实现吗?

下面是我所描述的情况的一个示例。请注意,MyCustomAutoDataAttribute 只是 AutoDataAttribute 的一个基本继承对象,它会导致为夹具配置 AutoMoqCustomization。

[Theory, MyCustomAutoDataAttribute]
public void FooBar(Exception exception, [Frozen] ISomeInterface)
{
    ...
    ISomeInterface.Setup(i => i.SomeMethod()).Throws(exception);
    ...
}

【问题讨论】:

    标签: xunit.net autofixture automoq


    【解决方案1】:

    我找到了一个可行的解决方案来解决我的问题。这感觉像是一种解决方法,但它为我完成了工作。

    [Theory]
    [MyCustomInlineAutoData(typeof(CustomException1))]
    [MyCustomInlineAutoData(typeof(CustomException2))]
    public void FooBar(Type exceptionType, [Frozen] Mock<ISomeInterface> interface, [Frozen] IFixture fixture)
    {
        var exception = (Exception) new SpecimenContext(fixture).Resolve(exceptionType)
        interface.Setup(i => i.SomeMethod()).Throws(exception);
    }
    

    属性的定义如下:

    public class MyCustomInlineAutoData : InlineAutoDataAttribute
    {
        public MyCustomInlineAutoData(params object[] values) : base(new MyCustomAutoDataAttribute(), values)
        {
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-11
      • 1970-01-01
      • 2019-12-19
      • 2019-09-22
      • 1970-01-01
      • 2016-06-04
      相关资源
      最近更新 更多