2009-07-30 2 views
7

In einem meiner Komponententests möchte ich prüfen, ob alle öffentlichen Methoden den Typ von ActionResult zurückgeben. Hier ist meine Test-Methode:RuntimeType statt Typ in C# Einheitentest

[TestMethod] 
    public void Public_Methods_Should_Only_Return_ActionResults() 
    { 

     MethodInfo[] methodInfos = typeof(MyController).GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); 

     foreach (MethodInfo methodInfo in methodInfos) 
     { 
      Assert.IsInstanceOfType(methodInfo.ReturnType, typeof(System.Web.Mvc.ActionResult)); 

     } 

    } 

Dieser Test explodiert auf dem ersten Verfahren von MyController:

[Authorize] 
public ActionResult MyList() 
{ 
    return View(); 
} 

Mit dem folgenden Fehler:

Assert.IsInstanceOfType failed. Expected type:<System.Web.Mvc.ActionResult>. Actual type:<System.RuntimeType>. 

Als ich an diesem Assert einen Haltepunkt gesetzt und überprüfen Sie den methodInfo.ReturnType vom Typ Type und es ist ActionResult.

Kann mir jemand erklären, warum der Test explodiert und was zu tun ist, damit es funktioniert?

Vielen Dank im Voraus, MR

Antwort

11

Verwenden Assert.AreEqual statt Assert.IsInstanceOfType. Sie möchten den Typ des Ergebnisses überprüfen, nicht den Typ der Information des reflektierten Typs.

+0

Vielen Dank. Jetzt funktioniert es so, wie ich es wollte. –