AutoFixture测试停止在测试运行器中显示

问题描述

AutoFixture(或我的误用)似乎已导致xunit测试运行程序停止在树视图中显示每个内联数据实例的单独测试。通常,如果我使用[Theory]和[InlineData],则会在测试运行器树视图中显示单个测试,每个[InlineData]一个。在以下情况下不再发生这种情况:

我创建了一个自定义automoqDataAttribute类,以始终使用automoqCustomization并禁用递归:

public sealed class automoqDataAttribute : AutoDataAttribute
{
    /// <summary>
    /// Automaticaly adds the "Auto Moq" customization to fixures that use the
    /// AutoDataAttribute attribute.
    /// </summary>
    public automoqDataAttribute() : base(() =>
    {
        // Create a fixture we can customize.
        var fixture = new Fixture();

        // Remove the recursion checks as we have objects that require recursion.
        var throwingRecursionBehavior = fixture.Behaviors.FirstOrDefault(behavior => behavior.GetType() == typeof(ThrowingRecursionBehavior));
        if (throwingRecursionBehavior != null) fixture.Behaviors.Remove(throwingRecursionBehavior);

        // Have to also add in the OmitOnRecursionBehavior to avoid a stack overflow error
        // presumably,since we removed the above,and without this,AutoFixture follows every
        // object and just keeps trying to auto fill its data. By following the circular
        // references it just goes on forever.
        fixture.Behaviors.Add(new OmitOnRecursionBehavior());

        // Use the "Auto Moq" customization so we have AutoFixture automatically mock objects for us.
        fixture.Customize(new automoqCustomization());

        return fixture;
    }) { }
}

然后,当我使用Theory / InlineData时,我希望它能够正常工作,因此我也创建了这个代码

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

最后,我尝试运行一些测试:

    public class TestClass
    {
        public bool Val { get; set; }
    }

    [Theory]
    [InlineData("blah 1",true)]
    [InlineData("blah 2",true)]
    public void Test1(string dummy,bool expected)
    {
        Assert.Equal(expected,true);
    }

上面的方法工作正常……但是我运行了这个

    [Theory]
    [InlineautomoqData("blah 1",false)]
    [InlineautomoqData("blah 2",false)]
    public void Test2(string dummy,bool expected,TestClass sut)
    {
        Assert.Equal(expected,sut.Val);
    }

运行测试,但我没有像通常那样在测试运行程序中看到两个测试,每个InlineautomoqData一个。如果单击测试并在“测试详细信息摘要”面板中查看,我会看到它们,这几乎可以满足要求,除非我无法从此处重新运行失败的测试(并且我指的是针对单个InlineData案例的测试)。我可以从树状视图中查看,但是再一次,它们没有显示在那里,所以这是一个大问题,因为它运行所有InlineautomoqData测试,并且我想隔离并仅运行例如一个失败了。

如果我添加属性

[Datadiscoverer(“ Xunit.Sdk.InlineDatadiscoverer”,“ xunit.core”)]

在我的InlineautomoqDataAttribute中,单个测试(每个InlineautomoqData一个显示在测试浏览器中,但随后出现此错误

“ InvalidOperationException:测试方法期望2个参数值,但是提供了1个参数值。”

表示AutoFixture自动模拟值不起作用。

有什么办法可以让我的自定义InlineautomoqData属性仍然在测试浏览器中显示每个InlineautomoqData的测试?这是我应该向AutoFixture报告的错误,还是我做错了什么?

解决方法

这是AutoFixture中的一个已知问题,尽管我不确定GitHub存储库中是否存在正式问题。如果没有,欢迎您提出问题并在那里跟踪问题的进展。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...