【问题标题】:How to make unit test methods shorter如何使单元测试方法更短
【发布时间】:2021-10-29 18:55:16
【问题描述】:

我有一些单元测试。像这样:

[TestFixture]
public class Tests
{
    [SetUp]
    public void Setup()
    {
    }
}
    

但它看起来几乎是相同的代码。可以写得更短吗?

我正在使用 NUnit 测试框架。

这是代码:

public class Parcel
{
    
 //Some code
    
}

现在可以了

【问题讨论】:

    标签: c# unit-testing nunit


    【解决方案1】:

    您可以使用TestCase 代替Test 属性来运行具有不同数据的相同测试代码,例如

    [TestCase(0.02m, "Name: parcel - Postal code 2582Cd - Weight 0,02 - Value 0,0 - Department Mail")]
    [TestCase(2m, "Name: parcel - Postal code 2582Cd - Weight 2 - Value 0,0 - Department Regular")]
    public void ParcelsWithSpecificWeightShouldBeSpecificToString(decimal weight, string expected)
    {
        var parcel = new Parcel { Name="parcel", PostalCode = "2582Cd", Weight = weigth, Value = 0.0m };
        Assert.AreEqual(expected, parcel.ToString());
    }
    

    但实际上你正在测试Department 属性,所以我建议不要测试parcel.ToString(),而是parcel.Department

    [TestCase(0.02m, "Mail")]
    [TestCase(2m, "Regular")]
    public void ParcelsWithSpecificWeightShouldBeSpecificDepartment(decimal weight, string expected)
    {
        var parcel = new Parcel { Name="parcel", PostalCode = "2582Cd", Weight = weigth, Value = 0.0m };
        Assert.AreEqual(expected, parcel.Department);
    }
    

    【讨论】:

    • 是的,也是值。在一个测试用例中,它是一个混合版本:所以重量和价值。
    【解决方案2】:

    如果您想减少测试方法中的行数 - 您可以在 Setup() 中将宗地初始化为 parcel1、parcel2....parcelN。

    但是,这仍将使用与您当前设置相同的代码行数,只是在测试方法之外。老实说,进一步优化 2 行方法并不容易。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-29
      相关资源
      最近更新 更多