【问题标题】:Unit testing toString method单元测试 toString 方法
【发布时间】:2021-10-29 18:15:09
【问题描述】:

我尝试对一个 Tostring 方法进行单元测试:

所以我有这个代码:

public class Parcel
{
 //Working
}

【问题讨论】:

  • ToString 确实返回一个字符串,您必须检查您的预期结果。
  • var parse; = new Parsel { Name = "Hello", ... };

标签: c# unit-testing nunit


【解决方案1】:

你应该这样写你的测试:

[Test]
public void ParcelsUpToWeightOneKGShouldBeDepartmentMail()
{
    var parcel = new Parcel { Name="pacel ", PostalCode="2582Cd", Weight= 0.02m, Value=0.0m};          
         
    Assert.Equal("Name: pacel - Postal code 2582Cd - Weight 0.02 - Value 0.0 - Department Mail", parcel.ToString());
}

ToString() 方法返回一个字符串,但不改变包裹的状态。所以你应该检查返回的值。

【讨论】:

  • 好的,谢谢。但这是我得到的错误。如果我这样做,那么我会得到这个错误:Literal of type double cannot be implicitly convert to type 'type';使用“后缀”后缀来创建这种类型的文字
  • 好的,刚刚编辑了我的答案。您应该在问题中发布完整的错误消息。
  • 好的,谢谢。我只收到此错误:字符串长度均为 78。字符串在索引 6 处不同。预期:“名称:包裹 - 邮政编码 2582Cd - 重量 0.02 - 值 0.0 ...”但是:“名称:包裹 - 邮政编码 2582Cd -重量 0,02 - 值 0,0 ..." -----------------^ 堆栈跟踪:Tests.ParcelsUpToWeightOneKGShouldBeDepartmentMail() 第 26 行
  • 好的,现在您必须比较 'Expected' 和 'But was' 字符串并找出不同之处。然后决定哪一个是正确的并调整测试或ToString() 方法。我不会为你做这个。但是在您的错误消息中,提到了字符位置(基于 0)。而且我确实看到 Expected 与 ',' 一起使用,而 But was 与 '.' 一起使用。
【解决方案2】:

您写道:“我只想对 CreateDepartmentValue 方法的第一个条件进行单元测试。”在这种情况下,不要测试ToString() 方法,而是测试Department 属性的值。您的测试变得更加稳定,因为否则如果您更改 ToString() 方法,您将不得不更改您的测试,尽管您只对 Deptartment 属性的值感兴趣。

您的测试可能如下所示:

[Test, Pairwise]
public void DepartementShouldDependOnWeight(
       [Values(1.0m, 1.01m, 10.0m, 10.01m)]decimal weight,
       [Values("Mail","Regular","Regular","Heavy")]string expectedDepartment)
{
    var parcel = new Parcel { Weight = weight, Value = 0 };
    Assert.AreEqual(parcel.Department, expectedDepartment);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多