NUnit框架下如何让基类公共测试用例优先于派生类测试执行
问题根因
NUnit的[Order]属性默认按声明类的作用域单独排序:同一个类中声明的测试方法按Order值排序,基类的测试会被归为独立的一组,排在子类所有测试之后执行,所以即便基类和子类的测试都标注Order(1),基类测试仍然会后执行。
解决方案
方案1:调整基类测试的Order优先级(最便捷,保留公共测试用例属性)
把基类的公共测试Order值设置为比子类所有测试的Order值都小即可,比如设置为负数(子类的Order从1开始的话,负数优先级更高):
[TestFixture, Order(1)] public abstract class BaseClass { // 把Order设置为-1,优先级高于子类所有≥1的Order值 [Test, Order(-1)] public async Task CommonTest() { //Perform tests } } [TestFixture, Order(1)] public class ClassA : BaseClass { [Test, Order(1)] public async Task Test1() { //Perform Tests } [Test, Order(2)] public async Task Test2() { //Perform Tests } }
修改后执行顺序就会符合预期:每个夹具先执行CommonTest,再按顺序执行子类的测试。
方案2:前置校验逻辑改为OneTimeSetUp(按需选择)
如果这个公共测试的作用只是校验端点可用性、不需要单独作为测试用例统计结果,可以把逻辑放到[OneTimeSetUp]标记的方法中,它会在当前TestFixture的所有测试执行前自动运行:
[TestFixture, Order(1)] public abstract class BaseClass { [OneTimeSetUp] public async Task CommonPreCheck() { // 端点可用性校验逻辑,校验失败会直接终止当前夹具的所有测试 } }
内容的提问来源于stack exchange,提问作者Jaynill Gopal
相关产品推荐
相关产品推荐

