Я уже прочитал this и попробовал решение, и это не сработало для меня. Я пытаюсь понять это и, возможно, я не тестирую это правильно. Я получаю NullReferenceException
на линии в контроллере, где я тестирую ModelState. Я использую MVC 3 с NUnit в качестве своего набора тестов. ShouldBeViewNamed("Index")
- это метод расширения, который я написал для проверки имени представления, которое я возвращаю, но я даже не догадываюсь, когда выполняю код. Вот мой контроллер:Почему мой ModelState null при запуске модульного теста?
public class TestController : Controller
{
[HttpPost]
public ViewResult Index(TestModel model)
{
if(ModelState.IsValid) // results in a null reference exception.
return View();
return new ViewResult();
}
}
и тестовый класс:
[TestFixture]
public class TestControllerTest
{
[Test]
public void TestingModelState()
{
// Arrange
var model = new TestModel();
var controller = new TestController();
// Arbitrary values to indicate an error in the model
controller.ModelState.AddModelError("tester1", "error happened");
// Act
var result = controller.Index(model);
// Assert
result.ShouldBeViewNamed("Index");
}
}
По мнению большинства блогов, которые я читал, это должно «просто работать». Но независимо от того, что я делаю, ModelState всегда имеет значение null ... Если это работает для кого-то другого, я предполагаю, что это связано с моей локальной настройкой или, возможно, с каркасом, который мы используем. У меня был еще один тест разработчика в моем магазине, и он также получает то же исключение.
EDIT: Я сузил проблему, чтобы быть конкретным для этого конкретного проекта. Добавляя новый проект к решению и тестируя те же тесты, я не могу дублировать эту проблему. Излишне говорить, что это унаследованный проект, который был запущен в 2009 году, вероятно, как проект MVC 1, и был повышен до MVC 3. Далее я рассмотрю настройки уровня проекта.
EDIT: См. Ответ ниже, получается, что консультант, которого мы наняли некоторое время назад, попытался обновить проект до MVC 4, столкнулся с некоторыми проблемами и никогда не возвращал файлы. Большинство модульных тестов все еще проходили, и проекты выполнялись нормально, но проект NUnit имел плохую ссылку на MVC 4. Мне пришлось вручную удалить ссылку из файла .csproj
и прочитать его в VS, и все работает.
Вы избили меня до него. Я буквально только что обнаружил это около 10 минут назад и написал ответ, когда увидел ваш пост. – akousmata
Я потерял день, пытаясь найти решение для этого. Спасибо за этот ответ. – elector