【发布时间】:2019-03-05 13:49:07
【问题描述】:
我刚开始使用单元测试,我正在使用 xUnit 框架。我有一个 AbstractTest 类,它定义了一些我将在每个测试类中使用的抽象测试方法。 问题出在静态字段 - InsertData。在这种情况下,MemberData InsertData 必须是静态的。我无法为继承类 (TestClass) 中的 InsertData 赋值,因为在调试器接触两个构造函数之前出现错误。
public abstract class AbstractTest<TModel> where TModel : class
{
public IRepository<TModel> repo;
public static IEnumerable<object[]> InsertData;
[Theory]
[MemberData(nameof(InsertData))]
public virtual void AbsTestInsert(TModel model)
{
try
{
repo.AddUpdate(model);
Assert.True(true);
}
catch (Exception ex)
{
Assert.True(false, ex.Message);
}
}
}
public class TestClass : AbstractTest<TestModel>
{
public TestClass()
{
repo = TestRepository();
}
}
因为我继承了 AbstractTest 类,所以我将进行测试。
我找不到解决方案使 InsertData 保持静态,但要在继承的类中覆盖其值。
我有这样的想法:
public static IEnumerable<object[]> InsertData() => Data;
public abstract/virtual IEnumerable<object[]> Data()
{
return ...;
}
但要做到这一点,数据也必须是静态的......
【问题讨论】:
-
为什么需要 InsertData 是静态的?你得到的错误是什么?
-
由 xUnit 框架定义... MemberData 必须引用静态成员...
-
查看here 示例,了解如何使用 MemberData
-
没有像我这样的例子......他只使用不同的数据类......
-
I can't find a solution to InsertData remain static but to override its value in the inherited class.这可能不实用
标签: c# unit-testing asp.net-core xunit