Вопрос

Я использую MVC 2 с MVC INPUT и RHINO MODS.

Мне нужна помощь. Это было болезненным выходным. Я пытался искать хорошие статьи о том, как проводить тестирование на контроллерах, используя MVC вклад. И никто не имеет никаких приличных ответов для меня. Я хочу знать, что мне нужно проверить на вид и в контроллерах? Это устройство тестирования или тестирования интеграции?

Позвольте мне описать мой основной сценарий: у меня есть вид индекса, который имеет сетку на нем. В этой сетке у меня есть список новостей. В этой сетке в последнем столбце каждой строки есть ссылка редактирования, которая принимает пользователь в представление retiveNews для редактирования выбранного товара новостей. Также на этом представлении INDEX - кнопка «Добавить новости», которая принимает пользователь на вид CreateNews.

Теперь дал текущий сценарий, какие тесты мне нужно написать? Можете ли вы, ребята, пожалуйста, также укажите, являются ли они единичные тесты или тесты интеграции. Нужно ли мне написать тест на ссылку редактирования? Нужно ли написать тест на кнопку Добавить новости? Нужно ли написать тест, чтобы проверить, разрешен ли пользователь на этой индексовой странице? Это то, что у меня в настоящее время есть:

[Test]
public void Index_Should_Redirect_To_Error_View_When_User_Does_Not_Have_Permission()
{
}

[Test]
public void Index_Should_Log_Exception_When_User_Does_Not_Have_Permission()
{
}

[Test]
public void Index_Should_Return_Default_View()
{
   // Act
   var result = newsController.Index();

   // Assert
   result
      .AssertViewRendered()
      .ForView("Index");
}

Обновлено: вот мой метод действий индекса:

public ActionResult Index()
{
   IEnumerable<News> news = newsRepository.FindAll();
   return View(news);
}

Любые приличные статьи или пример кода будут оценены. Также на MVC вкладывают, образцы кода не имеют большого использования. Я хотел бы услышать как можно больше мнения.

Спасибо.

Это было полезно?

Решение

Вам необходимо сделать различие между модульными тестами, тестами интеграции и веб-тестами. Устройства тесты предназначены для тестирования различных компонентов вашего кода, такого как действия контроллера в изоляции. Тесты в интеграции предназначены для тестирования интеграции между вашим кодом и внешними компонентами, такими как репозиторий, который читает и записывает данные из базы данных, и веб-тест предназначен для тестирования всего пользовательского сценария вашего приложения, такого как пользователь, набрав некоторые адрес в адресной строке. его браузера, нажав на некоторую кнопку, ...

MVCCONTRIB.Testheelper и носороги предназначены для упрощения ваших модульных испытаний. Так что в вашем сценарии вы должны проверить свой Index Действие контроллера. Не показывая код, это действие контроллера содержит трудно сказать, что именно вам нужно проверить. В целом то, что вы можете установить тестирование в действии контроллера, заключается в том, что он проверяет вход, вызывает правильные методы в репозитории и в соответствии с результатами, которые он возвращает правильный вид.

Итак, давайте предположим, что у вас есть следующие индексные действия, которые вы готовы проверить:

public class HomeController: Controller
{
    private readony INewRepository _repository;
    public HomeController(INewRepository repository)
    {
        _repository = repository;
    }

    public ActionResult Index()
    {
        var news = _repository.GetNews();
        return View(news);
    }
}

И соответствующий модульный тест:

[TestClass]
public class HomeControllerTests : TestControllerBuilder
{
    private HomeController _sut;
    private INewsRepository _repositoryStub;

    [TestInitialize()]
    public void MyTestInitialize() 
    {
        _repositoryStub = MockRepository.GenerateStub<INewsRepository>();
        _sut = new UsersController(_repositoryStub);
        InitializeController(_sut);
    }

    [TestMethod]
    public void UsersController_Index_Should_Fetch_News_From_Repository()
    {
        // arrange
        var news = new News[0];
        _repositoryStub.Stub(x => x.GetNews()).Return(news);

        // act
        var actual = _sut.Index();

        // assert
        actual
            .AssertViewRendered()
            .WithViewData<News[]>()
            .ShouldBe(news);
    }
}

Что касается ваших взглядов, вам нужно будет писать веб-тесты, чтобы убедиться, что они ведут себя как ожидалось. Есть разные инструменты, которые могут помочь вам здесь, как Селен или напрямую использовать Веб-тесты Если у вас есть окончательная версия Visual Studio. Стивен Сандерсон также предложил интересный подход Для просмотра просмотра вы можете взглянуть.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top