Как избежать пропусков в ASP.NET MVC - PullRequest
4 голосов
/ 20 января 2011

При тестировании приложения ASP.NET MVC 2 я столкнулся с проблемой, когда представление не может быть найдено.

Глядя на код, я понял, что файл aspx для представления не был добавлен в источникконтрольный репозиторий.В этом проекте это довольно просто сделать, так как мы используем StarTeam для контроля исходного кода, и он не показывает новые папки при регистрации. Это представление было для нового контроллера, поэтому для него была создана новая папка, и поэтому она была пропущена.

Наш сервер сборки (использующий Hudson / MSBuild) не воспользовался этим, поскольку код по-прежнему прекрасно работает с отсутствующим файлом aspx.Наши тестовые модули контроллера тестируют ActionResults, которые, очевидно, все еще проходят без представления.

Это обнаружилось при тестировании системы, но как я могу поймать это раньше (в идеале на сервере сборки).Заранее спасибо

Ответы [ 3 ]

2 голосов
/ 20 января 2011

Вы можете написать модульные тесты, которые проверяют фактическое представление, и затем, если модульный тест не проходит на сервере сборки, вы знаете, что у вас есть проблема. Для этого вы можете использовать такие рамки:
http://blog.stevensanderson.com/2009/06/11/integration-testing-your-aspnet-mvc-application/

С этим вы можете написать модульные тесты, такие как этот (из поста)

[Test]
public void Root_Url_Renders_Index_View()
{
    appHost.SimulateBrowsingSession(browsingSession => {
        // Request the root URL
        RequestResult result = browsingSession.ProcessRequest("/");

        // You can make assertions about the ActionResult...
        var viewResult = (ViewResult) result.ActionExecutedContext.Result;
        Assert.AreEqual("Index", viewResult.ViewName);
        Assert.AreEqual("Welcome to ASP.NET MVC!", viewResult.ViewData["Message"]);

        // ... or you can make assertions about the rendered HTML
        Assert.IsTrue(result.ResponseText.Contains("<!DOCTYPE html"));
    });
}
1 голос
/ 20 января 2011

Какую версию StarTeam вы используете?В StarTeam 2008 (не уверен, когда эта функция была впервые добавлена) в выбранном проекте / представлении вы можете выбрать из меню Folder Tree->Show Not-In-View Folders.Это покажет папки на локальном диске, которые не были добавлены в проект (они будут отображаться с белым цветом значка папки).

0 голосов
/ 12 марта 2016

Это старый вопрос, но если кто-то все еще ищет это, вы должны попробовать SpecsFor.Mvc от Matt Honeycutt .

Не только его можно использовать, чтобы убедиться, что Views правильно включены / добавлены в систему контроля версий, он может даже выполнить интеграционный тест, чтобы убедиться, что эти Views действительны.

Ссылка на свой веб-сайт: http://specsfor.com/SpecsForMvc/default.cshtml

Ссылка напакет nuget: https://www.nuget.org/packages/SpecsFor.Mvc/

Ссылка на github: https://github.com/MattHoneycutt/SpecsFor

Вот фрагмент кода, взятый с веб-сайта и показывающий, как его использовать.

public class UserRegistrationSpecs
{
    public class when_a_new_user_registers : SpecsFor<MvcWebApp>
    {
        protected override void Given()
        {
            SUT.NavigateTo<AccountController>(c => c.Register());
        }

        protected override void When()
        {
            SUT.FindFormFor<RegisterModel>()
                .Field(m => m.Email).SetValueTo("test@user.com")
                .Field(m => m.UserName).SetValueTo("Test User")
                .Field(m => m.Password).SetValueTo("P@ssword!")
                .Field(m => m.ConfirmPassword).SetValueTo("P@ssword!")
                .Submit();
        }

        [Test]
        public void then_it_redirects_to_the_home_page()
        {
            SUT.Route.ShouldMapTo<HomeController>(c => c.Index());
        }

        [Test]
        public void then_it_sends_the_user_an_email()
        {
            SUT.Mailbox().MailMessages.Count().ShouldEqual(1);
        }

        [Test]
        public void then_it_sends_to_the_right_address()
        {
            SUT.Mailbox().MailMessages[0].To[0].Address.ShouldEqual("test@user.com");
        }

        [Test]
        public void then_it_comes_from_the_expected_address()
        {
            SUT.Mailbox().MailMessages[0].From.Address.ShouldEqual("registration@specsfor.com");
        }
    }
} 
...