Xunit Prevent base class 执行测试

Xunit Prevent base class to execute tests

我最近开始使用 XUnit,我们有几种方法需要测试,它们都使用相同的测试方法和相同的测试数据。显然,创建一个包含所有测试方法的基 class 并调用一个可以被覆盖的虚方法是我的第一个方法。 但是,当我执行测试运行程序时,基础 class 也会被执行,并且由于虚拟方法不包含任何代码,因此大多数测试都失败了。

那么我应该如何构造这段代码,以便不调用 BaseEmployeeTest 中的方法?

public class BaseEmployeeTest : IEmployeeTest
{


    public virtual void CallTestMethod(string userSessionId, long employeeId)
    {
        // no-op 
    }

    [Theory]
    [MemberData(nameof(TestData.Emp), MemberType = typeof(Data))]
    public void Pu_CanSee_Own_Customer_Employees(long employeeId)
    {
        var ex = Record.Exception(() => CallTestMethod(_fixture.PuUserSessionId, employeeId));


        Assert.Null(ex);
    }
}

public class Test : BaseEmployeeTest
{
    public override void CallTestMethod(string userSessionId, long employeeId)
    {
        CallTestDataMethod("x", "y"
    }
}

如果你做到了 abstract,那应该可以满足你的需要,即替换

public class BaseEmployeeTest

public abstract class BaseEmployeeTest