2016-06-27 21 views
0

Ich habe die folgende Klasse:Test-Gleichheit zweier Objekte auf Tests

public class OrderRule { 
    public OrderDirection Direction { get; } 
    public String Property { get; } 
} 

ich einen Unit-Test unter Verwendung von XUnit wie folgt erstellt:

public void TryParse_ParseAscendingOrderRule() { 

    OrderRule expect = new OrderRule("name", OrderDirection.Ascending); 

    OrderRule result = factory.GetOrderRule("type1"); 

    Assert.Equal(result, expect); 

} 

Ich weiß erwarten und Ergebnis haben die gleiche Richtung und Eigenschaftswerte, aber ich bekomme immer noch False bei meinem Test ... Ich nehme an, das liegt daran, dass sie nicht dieselbe Instanz sind ...

Muss ich Direction und Property wirklich wie folgt vergleichen?

Assert.True(result.Property == expect.Property && expect.Property == expect.Property); 

Dies kann wirklich lang werden, wenn die Objekte viele Eigenschaften haben ...

Oder gibt es einen besseren Weg, dies zu tun?

Antwort

1

Wenn es nicht notwendig ist, dass OrderRule eine Klasse ist, dann machen Sie es zu einer Struktur, die standardmäßig die Gleichheit der Werte implementiert. Es gibt auch eine ganze MSDN page über Wertgleichheit, die Ihnen helfen könnte.

+0

In diesem Fall muss es eine Klasse sein ... –

+1

Dann überschreiben Sie einfach 'Equals' und machen Sie den Vergleich einmal - Ihre xUnit Tests bleiben dann sauber. Es gibt auch ein gutes Beispiel dafür auf der referenzierten MSDN-Seite – DAXaholic