Как объединить / интегрировать тестовые представления для обнаружения критических изменений - PullRequest
1 голос
/ 12 февраля 2012

Я только начал изучать asp.net mvc, и одной из основных причин был переход на TDD.

Я пишу небольшое приложение на приборной панели с отчетами.В этом приложении у меня был основной контроллер, называемый ReportsController, который сейчас имеет только один метод - GetReport, который принимает запрос и возвращает представление, если запрос удовлетворяет определенным условиям, в противном случае возвращается сообщение об ошибке.

[HttpGet]
public ActionResult GetReport(string query)
{    
    //calls the QueueRep and gets back DataTable
    ReportQuery reportQuery = new ReportQuery(query);
    if (reportQuery.IsValidQuery)
    {
        queryRepository.ExecuteReportQuery(ref reportQuery);                
    }
    else
    {
        return View("Error");
    }           
    ViewData.Add("ResultDataTable",reportQuery.ResultDataTable);

    return View();

}

Я написал для этого 2 модульных теста следующим образом

public void GetReport_Should_Return_Error_View_For_Malicious_Query()
{
    //Arrange
    string query = "drop table userInfo";
    var controller = CreateReportsController(query);

    //Act
    var result = controller.GetReport(query) as ViewResult;

    //Assert
    Assert.AreEqual(result.ViewName, "Error");

}

[Test]
public void GetReport_Should_Return_View_With_DataTable_For_Correct_Query()
{
    //Arrange
    StringBuilder sb = new StringBuilder();

    sb.Append("SELECT Year(CreatedOn) as Year, Month(CreatedOn) as Month, Count(CREATEDON) as NewEmployers");
    sb.Append("FROM dbo.UserInfo WHERE DefaultPurpose = 1 GROUP BY Year(CreatedOn), Month(CreatedOn)");

    string query = sb.ToString();

    var controller = CreateReportsController(query);

    //Act

    var result = controller.GetReport(query) as ViewResult;

    //Assert

    Assert.IsTrue(result.ViewData.ContainsKey("ResultDataTable"));
    Assert.IsTrue(result.ViewData["ResultDataTable"].GetType() == typeof(System.Data.DataTable));

}

Теперь из-за конфликта с SSRS сервер / отчеты указывал наSSRS вместо контроллера отчетов, поэтому я изменил имя ReportsController на MyReportsController.Я использовал refactor для изменения имени, а также изменил свои юнит-тесты в тестовом проекте и запустил юнит-тесты.Все хорошо.

Но теперь, когда я запустил реальное приложение, я получил ошибку.По сути, имя папки представлений пришлось изменить с «Отчеты на MyReports».Как я могу проверить такие сценарии.Используются ли только инструменты функционального тестирования, такие как селен?Или я мог бы написать свои тесты по-другому?

Ответы [ 2 ]

1 голос
/ 13 февраля 2012

Да, ручное тестирование или инструменты функционального тестирования, такие как Selenium, - единственный способ обнаружить эти критические изменения.

Причина в том, что при модульном тестировании вы тестируете только небольшие куски кода.Так что тестирование метода действия контроллера - это здорово!В этом тесте вы должны помнить, что вы тестируете собственный код, а не фреймворки asp.net и / или mvc.Теперь, чтобы отобразить результат просмотра, это обрабатывается вне вашего метода действия.Во-вторых, мы предполагаем, что логика рендеринга (как рендеринга) была протестирована Microsoft, поэтому мы не хотим тратить время на ее тестирование.

Таким образом, это означает, что нам нужно объединить независимые модули в одном тесте.Когда у нас есть 2+ модуля или области и т. Д. Для тестирования, мы внезапно выпрыгиваем из модульного тестирования в ручное или функциональное тестирование.

1 голос
/ 12 февраля 2012

Я не думаю, что есть что-то, что вы должны / могли бы сделать, чтобы проверить это с помощью модульных тестов, но интеграционные тесты с Selenium - хороший способ сделать это:

http://seleniumtoolkit.codeplex.com/

...