将对象作为测试参数

Snæ*_*ørn 1 xunit xunit.net

我试图编写一个测试,检查派生类中的方法是否未被错误覆盖.所以我尝试了以下内容.但无论我尝试什么,它似乎都不允许我"注入"我的对象.

[Theory]
[xxxData(new BaseClass())]
[xxxData(new DerivedClass())]
public void Test_Stuff(BaseClass obj)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

rob*_*i-y 10

假设我理解你的目标,我会看到两种方式:

  1. 使用InlineDataAttribute和传递类型
  2. 使用MemberDataAttribute(xunit.net v1中的PropertyData)

    [Theory]
    [InlineData(typeof(BaseClass))]
    [InlineData(typeof(DerivedClass))]
    public void Test_Stuff(Type type/*BaseClass obj*/)
    {
        var obj = Activator.CreateInstance(type) as BaseClass;
        CheckConstrain(obj);
    }
    
    
    [Theory]
    [MemberData("GetObjects")]
    public void Test_Stuff2(BaseClass obj)
    {
        CheckConstrain(obj);
    }
    
    public static IEnumerable<object[]> GetObjects
    {
        get
        {
           return new[] 
           {
            new object[] { new BaseClass() },
            new object[] { new DerivedClass() }
           };
        }
    }
    
    private static void CheckConstrain(BaseClass baseClass)
    {
        Assert.True(baseClass.Foo() <= 1);
    }
    
    Run Code Online (Sandbox Code Playgroud)

另请参阅此相关答案将复杂参数传递给[Theory]