簡體   English   中英

Nunit:檢查兩個對象是否相同

[英]Nunit: Check that two objects are the same

我有一個對象

 public class Foo
            {
                public string A{ get; set; }
                public string B{ get; set; }
            }

我正在比較SUT的返回值,當它為A和B返回null時,就像這樣。

Assert.That(returnValue, Is.EqualTo(new Foo { A = null, B = null}));

這沒用,所以我試過了

Assert.That(returnValue, Is.SameAs(new Foo { A = null, B = null}));

這也不起作用。

我得到一條消息

 Expected: same as <Namespace+Foo>
 But was:  <Namespace+Foo>

我究竟做錯了什么?

nunit文檔

在檢查用戶定義的類的相等性時,NUnit在預期的對象上使用Equals覆蓋。 如果忽略覆蓋Equals,則可能會出現非相同對象的故障。 特別是,重寫operator ==而不覆蓋Equals沒有任何效果。

但是,您可以提供自己的比較器來測試屬性的值是否相等。

如果測試相等性的默認NUnit或.NET行為無法滿足您的需求,則可以通過“使用”修飾符提供自己的比較器。 當與EqualConstraint一起使用時,您可以提供IEqualityComparer,IEqualityComparer,IComparer,IComparer; 或比較作為使用的參數。

Assert.That( myObj1, Is.EqualTo( myObj2 ).Using( myComparer ) );

所以在這種情況下你的比較器會是

    public class FooComparer : IEqualityComparer
    {
        public bool Equals(Foo x, Foo y)
        {
            if (x.A == y.A && x.B == y.B)
            {
                return true;
            }
            return false;
        }
        public int GetHashCode(Foo inst)
        {
            return inst.GetHashCode();
        }
    }

Nunit正在通過引用比較兩個對象對象,因此它顯示兩個對象不相等。 您必須覆蓋對象類中的Equals方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM