2014-03-12 9 views
5

Mit dem Visual Studio Unit Testing Framework-Objekt testen, ich bin bei zwei Möglichkeiten suchen:korrekte Weg, um Einheit den Typ eines

Assert.AreEqual(myObject.GetType(), typeof(MyObject)); 

und

Assert.IsInstanceOfType(myObject, typeof(MyObject)); 

Gibt es einen Unterschied zwischen diesen zwei Optionen? Ist einer mehr "korrekt" als der andere?

Was ist die Standardmethode dafür?

Antwort

11

Das erste Beispiel schlägt fehl, wenn die Typen nicht genau übereinstimmen, während die zweite nur dann fehlschlägt, wenn myObject dem angegebenen Typ nicht zugewiesen werden kann, z.

public class MySubObject : MyObject { ... } 
var obj = new MySubObject(); 

Assert.AreEqual(obj.GetType(), typeof(MyObject)); //fails 
Assert.IsInstanceOfType(obj, typeof(MyObject));  //passes 
+0

In meinem Fall teste ich in der Regel, wenn ein Objekt der genaue Typ ist ich es erwarten, so dass ich mit dem Testen Gleichheit direkt gehen :) – drl

2

Minor syntaktischer Punkt: Während die oben Assert.AreEqual() Aussagen funktionieren werden, ist die Reihenfolge der Parameter umgekehrt werden soll, das heißt, Assert.AreEqual(Type expected, Type actual).

Also, in diesem Fall: Assert.AreEqual(typeof(MyObject), obj.GetType());