【问题标题】:Give object as parameter for test将对象作为测试参数
【发布时间】:2015-07-23 23:57:22
【问题描述】:

我试图编写一个测试来检查派生类中的方法没有被错误地覆盖。所以我尝试了以下方法。但无论我尝试什么,它似乎都不允许我“注入”我的对象。

[Theory]
[xxxData(new BaseClass())]
[xxxData(new DerivedClass())]
public void Test_Stuff(BaseClass obj)
{
    // ...
}

【问题讨论】:

标签: xunit xunit.net


【解决方案1】:

假设我了解您的目标,我看到了两种方法:

  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);
    }
    

另请参阅此相关答案Pass complex parameters to [Theory]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多