gpt4 book ai didi

c# - 具有带参数的虚拟测试方法的 xUnit 抽象测试类

转载 作者:太空狗 更新时间:2023-10-30 01:29:00 25 4
gpt4 key购买 nike

我刚开始进行单元测试,并且正在使用 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 类,所以我将进行测试。 Test class

我找不到使 InsertData 保持静态但在继承类中覆盖其值的解决方案。

我有这样的想法:

public static IEnumerable<object[]> InsertData() => Data;
public abstract/virtual IEnumerable<object[]> Data()
{
return ...;
}

但是要做到这一点数据也必须是静态的...

最佳答案

理论数据来自静态源的要求是一项硬性要求,没有解决方法。但是,根本不需要在抽象类上定义数据。你可以这样做:

public abstract class AbstractTest<TModel> where TModel : class
{
public IRepository<TModel> repo;

[Theory]
[MemberData("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 static IEnumerable<object[]> InsertData;

public TestClass()
{
repo = TestRepository();
}
}

您在每个实现类上使用相同的名称定义数据。它不是虚拟的/抽象的,它只是按名称排列事物。

关于c# - 具有带参数的虚拟测试方法的 xUnit 抽象测试类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55004351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com