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
我最近开始使用 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