2009-07-30 2 views
7

В одном из моих модульных тестов я хочу проверить, возвращают ли все общедоступные методы тип ActionResult. Вот мой метод испытания:RuntimeType вместо Type in 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)); 

     } 

    } 

Этот тест взрывает на первом методе из MyController:

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

со следующей ошибкой:

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

Когда я поставил точку останова на этой Assert и проверьте методInfo.ReturnType, который имеет тип Type и ActionResult.

Может ли кто-нибудь объяснить мне, почему тест взрывается и что делать, чтобы заставить его работать?

Спасибо заранее, MR

ответ

11

Использование Assert.AreEqual вместо Assert.IsInstanceOfType. Вы хотите проверить тип результата, а не тип информации отраженного типа.

+0

спасибо. Теперь он работает так, как я этого хотел. –