MVCCONTRIB TESTHELPER дает странную ошибку при использовании AssertViewRendered
-
08-10-2019 - |
Вопрос
Я пытаюсь использовать тестовый помощник MVCContrib для проверки метода контроллера в MVC3.
Контроллер:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}
Тест:
[TestMethod]
public void Index()
{
// Arrange
HomeController controller = new HomeController();
// Act
ViewResult result = controller.Index() as ViewResult;
// Assert
result.AssertViewRendered().ForView("Index");
}
Ошибка:
Тестовый метод тестирования .Web.controllers.homecontrollertests.index бросил исключение: mvccontrib.testhelper.calceresultsertionexception: Ожидаемый результат, чтобы иметь тип ViewResult. Это на самом деле типа ViewResult.
Есть идеи?
Решение
Я думаю, что вы используете MVCCONTRIB для MVC2, и он использует ViewResult MVC2. Принимая во внимание, что вы возвращаете MVC3 ViewResult.
Вы пытались компилировать MVCContrib против MVC3?
Другие советы
Mvccontrib.testheelper использует более старую версию MVC. У сайта теперь есть версия MVC3, но, как я пишу эту MVC4, и обновленный MVCCONTRIB.Testheelpers для MVC4 еще не существует.
Не касаясь источника, вы можете исправить это с помощью перенаправления привязки. Разместите это в ваше тестовое приложение .Config:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Вышеуказанные очки образцов всех узлов просят MVC версии 1-3 для использования 4.
Если кто-то наступает в ту же ошибку в 2012 году, у меня такая же проблема с MVC4 и MVCCONTRIB, работающей против MVC3.
Решение было загрузки исходного кода для MVCCONTRIB. В проекте MVCCONTRIB.Testhelper Удалите ссылку на System.Web.mvc (по умолчанию он указывает на версию 3) и добавить System.Web.mvc, но убедитесь, что вы ссылаетесь на версию 4.0.0.
Затем перестройте проект, скопируйте сгенерированные файлы DLL с PDB (для перехода в код TestHelper) в ваше решение и добавьте ссылку на эту DLL. Работал для меня!