2009-07-30 18 views
7

W jednym z testów jednostkowych chcę sprawdzić, czy wszystkie publiczne metody zwracają typ ActionResult. Oto moja metoda badawcza:RuntimeType zamiast Type w C# Unit Test

[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)); 

     } 

    } 

Ten test wysadza na pierwszej metodzie z MyController:

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

z powodu następującego błędu:

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

Kiedy ustawić punkt przerwania na tej dochodzić i sprawdź metodę methodInfo.ReturnType, która jest typu Type i jest ActionResult.

Czy ktoś może mi wyjaśnić, dlaczego test wysadza w powietrze i co zrobić, aby działało?

Dzięki z góry, MR

Odpowiedz

11

Zastosowanie Assert.AreEqual zamiast Assert.IsInstanceOfType. Chcesz sprawdzić typ wyniku, a nie typ odbitego typu informacji.

+0

Dziękuję bardzo. Teraz działa tak, jak tego chciałem. –