给对象作为参数进行测试
Give object as parameter for test
我正在尝试编写一个测试来检查方法是否在派生 类 中被错误覆盖。所以我尝试了以下。但无论我尝试什么,它似乎都不允许我 "inject" 我的对象。
[Theory]
[xxxData(new BaseClass())]
[xxxData(new DerivedClass())]
public void Test_Stuff(BaseClass obj)
{
// ...
}
假设我了解您的目标,我认为有两种方法:
- 使用
InlineDataAttribute
并传递类型
使用 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]
我正在尝试编写一个测试来检查方法是否在派生 类 中被错误覆盖。所以我尝试了以下。但无论我尝试什么,它似乎都不允许我 "inject" 我的对象。
[Theory]
[xxxData(new BaseClass())]
[xxxData(new DerivedClass())]
public void Test_Stuff(BaseClass obj)
{
// ...
}
假设我了解您的目标,我认为有两种方法:
- 使用
InlineDataAttribute
并传递类型 使用
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]