NUnit的AreEqual测试的是参考相等还是值相等?

  • 本文关键字:参考 AreEqual 测试 NUnit f# nunit
  • 更新时间 :
  • 英文 :


在NUnit 2.6.4中,AreEqual是否测试引用相等或值相等?我很困惑,在我的一些测试中,它似乎在测试价值相等:

let result = xml |> objectProvider.Parse |> parseClassificationsFromList
let expectedResults = [[Classification (Id "_511175266", [], Primary)]]
Assert.AreEqual(expectedResults, result)

但在某些情况下:

let parsedXML = xml |> objectProvider.Parse
let results = funds parsedXML
let fS = XElement.Parse("""
<sectiondiv>
<p>.....</p>
</sectiondiv>""", LoadOptions.PreserveWhitespace)
let f = [|NewFunds(None, objectProvider.Sectiondiv(fS))|]

let expected = f;
let result = results;
Assert.AreEqual(expected, result);

我被告知:

Expected and actual are both <Funds[1]>
Values differ at index [0]

这表明它正在测试引用相等性。我完全糊涂了!在后一种情况下,我知道这些值是相同的,因为如果我将预期结果和实际结果转换为JSON,它们就会匹配。

NewFunds定义为:

type Funds =
| NewFunds of Specificity option * objectProvider.Sectiondiv

对于基本相等,NUnit使用所提供类型实现的任何相等定义,通常通过重写Equals,但可能通过实现IEQuatable<T>接口。如果对象没有做这两件事,那么引用类型的引用相等,值类型的值相等。

除了。。。

NUnit对集合的相等性有自己的定义。根据错误消息,看起来NewFunds对象就是这样的。在这种情况下,NUnit将等式实现为集合中每个成员的等式,按顺序执行。

注意:这比这更复杂,有很多特殊情况,但我认为我列出的是影响您的示例的情况。

最新更新