You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 19:42:03