Я отредактировал и упростил этот вопрос.Почему этот тест модуля asp.net mvc терпит неудачу?
Если у меня есть этот метод на моем HomeController:
public ActionResult Strangeness(int id)
{
StrangenessClass strangeness = null;
if(id == 1)
{
strangeness = new StrangenessClass() { Name="Strangeness", Desc="Really weird behavior" };
}
return View(strangeness);
}
И есть этот класс:
public class StrangenessClass
{
public string Name { get; set; }
public string Desc { get; set; }
}
Почему этот тест устройство не может?
[TestMethod]
public void Strangeness()
{
HomeController controller = new HomeController();
ViewResult result = controller.Strangeness(1) as ViewResult;
var model = result.ViewData.Model;
result = controller.Strangeness(2) as ViewResult;
model = result.ViewData.Model;
Assert.IsNull(model);
}
Я понимаю, что, как правило, я бы один тест, чтобы проверить нулевое состояние, а другое, чтобы проверить хорошее состояние, но я столкнулся с этой проблемой при тестировании моего удаления контроллера. В тесте удаления я обычно беру запись, удаляю запись, а затем пытаюсь извлечь ее снова. Он должен быть нулевым во второй раз, когда я его получаю, но это не так. Итак, я кипятил проблему, как описано выше.
Если это не правильный способ проверки удалений, как бы вы это сделали? Вам не нужно убедиться, что запись была фактически удалена?
Есть два метода удаления контроллера, которые я опубликовал. Первый для извлечения состояния, подлежащего удалению, и второго метода post для фактического удаления. Переменная _stateService - это экземпляр моей государственной службы, основанный на интерфейсе и отменяющий все на FakeStateRepoditory для модульного тестирования. Мой TestInitialize устанавливает все это, поэтому у меня есть данные для каждого теста. Аранжировка получает запись, которую я хочу удалить, действие пытается удалить ее, а затем снова извлечь ее, а актив удостоверяется, что она равна нулю и что мы были отправлены обратно в метод Index. –
Чтобы уточнить, у меня есть несколько тестов удаления, чтобы убедиться, что первый метод контроллера удаления возвращает правильные данные просмотра, чтобы убедиться, что я перенаправлен на нужное место, если попытаюсь удалить запись, которая не существует, и т. д. Этот конкретный тест позволяет убедиться, что запись действительно удалена. Чтобы сделать это, я должен получить его, отправить его для удаления и попытаться извлечь его еще раз, чтобы убедиться, что он ушел. –
При попытке использовать ваш метод я получаю следующую ошибку в тесте HomeController_Delete_Action_Handler_Should_Redirect_If_Model_Successfully_Delete: Не удалось найти параметр с именем «controller» в коллекции значений результата. Если я изменю его на: действительный .AssertActionRedirect() .ToAction («Index»); он работает. Но я предпочитаю ваш метод. Вы знаете, что я делаю неправильно? –