c# - 创建对象的单元测试方法,麻烦断言
问题描述
我有一个方法,它接受一个 XML 字符串并对其进行解析,返回一个IEnumerable<Invoice>
. 以下是正在使用的类的定义。请注意,anInvoice
包含InvoiceItem
s:
public class Invoice
{
public const string XmlName = "invoice";
public int id { get; set; }
public string title { get; set; }
public DateTime timestamp { get; set; }
public bool paid { get; set; }
public IList<InvoiceItem> items { get; set; }
public Invoice() { this.items = new List<InvoiceItem>(); }
public decimal getTotal()
{
if (items == null)
return 0;
decimal total = 0;
foreach (InvoiceItem item in this.items)
total += item.amount;
return total;
}
}
public class InvoiceItem
{
public const string XmlName = "item";
public string description { get; set; }
public decimal amount { get; set; }
}
当使用 NUnit 对方法进行单元测试时,布尔值会发生一些奇怪的事情paid
。请注意,我已经在 .NET Fiddle 中测试了该方法,它返回了它应该返回的所有对象。因此,以下测试(部分代码)似乎有问题:
[Test]
public void readXml_Test()
{
// arrange
// xml stuff...
// expected objects
InvoiceItem item1 = new InvoiceItem { description = "item 1 in invoice 1", amount = 50 };
InvoiceItem item2 = new InvoiceItem { description = "item 2 in invoice 1", amount = 50 };
Invoice invoice1 = new Invoice
{
id = 1,
title = "Aug 2020",
timestamp = DateTime.ParseExact("16/08/2020 09:01:29 AM", "dd/MM/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture),
paid = true,
items = new List<InvoiceItem>() { item1, item2 }
};
InvoiceItem item3 = new InvoiceItem { description = "item in invoice 2", amount = 100 };
Invoice invoice2 = new Invoice
{
id = 2,
title = "Sep 2020",
timestamp = DateTime.ParseExact("16/08/2020 09:01:29 AM", "dd/MM/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture),
paid = true,
items = new List<InvoiceItem> { item3 }
};
// act
List<Invoice> actual = xml.readXml().ToList(); // readXml() is the method under test.
// assert
Assert.That(actual.Contains(invoice1));
Assert.That(actual.Contains(invoice2));
}
如前所述,我在 .NET fiddle 中对此进行了测试,结果对象都具有正确的属性值。但是,上述测试产生:
Message: Expected: True
But was: False
没有提到任何例外。因为我知道被测方法有效,所以这个测试似乎有问题。我该如何解决它以使其通过?
解决方案
推荐阅读
- google-analytics - 如何找到一个月内访问某个页面类型 x 次数的用户数?
- installation - 在 MAC(5.6.1) 上安装 omnetpp 时出错
- python - if else 在字典中列出理解
- python - 二进制和整数加法中的逻辑错误
- java - Java 集成测试没有可运行方法错误 - Spring Runner
- java - 石英 - 弹簧 - Java - Jobstore。如何将作业设置为完成状态
- java - 如何让这段代码进行广度优先搜索?
- python - 从多个和零星的嵌套字典和列表中提取
- python - 从 Python Tkinter 中主类外部的函数更新进度条
- r - R中的for循环在没有内置函数的情况下查找单个向量中的重复项