使用NUnit测试框架时如何缩短单元测试方法的代码长度?
NUnit 测试代码简化常用方案
基类封装通用初始化/清理逻辑
把多个测试类重复的SetUp、TearDown逻辑、通用字段都抽到公共测试基类中,测试子类直接继承即可复用,无需重复编写。
代码示例:
// 公共测试基类 public class ParcelTestBase { protected Parcel TestParcel; // 通用测试对象 [SetUp] public void BaseSetUp() { // 所有Parcel相关测试通用的初始化逻辑 TestParcel = new Parcel(); // 其他通用初始化操作 } // 也可以封装通用工具方法 protected void SetParcelDefaultConfig() { // 通用配置逻辑 } } // 子类测试类直接继承,无需重复写SetUp [TestFixture] public class ParcelWeightTests : ParcelTestBase { [Test] public void TestWeightCalculate() { // 直接使用基类初始化好的TestParcel SetParcelDefaultConfig(); // 测试逻辑 } }
参数化测试合并相似用例
如果多个测试用例只有输入、预期输出不同,无需单独写多个[Test]方法,用[TestCase]或[TestCaseSource]注解合并即可,大幅减少重复代码。
代码示例:
[TestFixture] public class ParcelFeeTests : ParcelTestBase { // 单个注解覆盖多个测试场景 [TestCase(1.2, "北京", ExpectedResult = 12.5)] [TestCase(3.5, "上海", ExpectedResult = 26.8)] [TestCase(0.8, "广州", ExpectedResult = 8.2)] public decimal TestDeliveryFeeCalculate(double weight, string destination) { TestParcel.Weight = weight; TestParcel.Destination = destination; return TestParcel.CalculateDeliveryFee(); } // 复杂参数用TestCaseSource public static IEnumerable<TestCaseData> ParcelValidTestCases = new List<TestCaseData> { new TestCaseData(new Parcel { Weight = 1, Receiver = "张三" }, true), new TestCaseData(new Parcel { Weight = -1, Receiver = "张三" }, false) }; [Test, TestCaseSource(nameof(ParcelValidTestCases))] public void TestParcelValid(Parcel parcel, bool expectedValid) { Assert.That(parcel.IsValid(), Is.EqualTo(expectedValid)); } }
封装通用断言工具
如果多个测试用例有重复的断言逻辑,可以抽成静态帮助方法,直接调用即可,不用每次重复写多段断言。
代码示例:
public static class ParcelAssert { public static void IsValidParcel(Parcel parcel) { Assert.Multiple(() => { Assert.That(parcel.Weight, Is.GreaterThan(0)); Assert.That(parcel.Receiver, Is.Not.Null.Or.Empty); Assert.That(parcel.Destination, Is.Not.Null.Or.Empty); }); } } // 测试中直接调用 [Test] public void TestCreateParcel() { var parcel = new Parcel { Weight = 2, Receiver = "李四", Destination = "深圳" }; ParcelAssert.IsValidParcel(parcel); }
内容的提问来源于stack exchange,提问作者mightycode Newton
相关产品推荐
相关产品推荐

