Pregunta

Cuando se prueba una aplicación ASP.NET MVC 2 golpeo un problema cuando un punto de vista no pudo ser localizado.

Mirando el código que se dio cuenta de que el archivo aspx para la vista no había sido añadido al repositorio de control de código fuente. En este proyecto que es bastante fácil de hacer ya que utilizamos StarTeam para el control de la fuente y que no muestra nuevas carpetas cuando llegue al hotel. Este punto de vista fue para un nuevo controlador y así una nueva carpeta fue creada por ella y por lo tanto se perdió.

Nuestro servidor de compilación (usando Hudson / MSBuild) no darán cuenta de esto, ya que el código todavía construye muy bien con el archivo aspx faltante. Nuestras pruebas unidad de control a prueba los ActionResults que obviamente todavía pasan sin la vista allí.

Esta fue recogida en las pruebas del sistema, pero ¿cómo puedo coger esto antes (idealmente en el servidor de compilación).

Gracias de antemano

¿Fue útil?

Solución

Se puede escribir pruebas de unidad que prueba el punto de vista real, y luego, si la prueba de la unidad no pasa en el servidor de compilación, usted sabe que tiene un problema. Para ello, puede utilizar un marco como este:
http://blog.stevensanderson.com/ 2009/06/11 / integración-prueba-su-Red PEA-mvc-application /

Con esto se puede escribir unidad de prueba como este (del poste)

[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"));
    });
}

Otros consejos

¿Qué versión de StarTeam se ejecuta? En StarTeam 2008 (no estoy seguro cuando se añadió esta función primero) dentro de un proyecto / vista seleccionada, puede seleccionar desde el menú Folder Tree->Show Not-In-View Folders. Esto mostrará las carpetas que tienes en el disco local que no se han añadido al proyecto (que aparecerán con el icono de la carpeta de color blanco).

Esta es una vieja pregunta, pero si alguien sigue buscando para ello debe tratar SpecsFor.Mvc por Matt Honeycutt .

No sólo se puede utilizar para asegurarse de que el Views estén debidamente incluidos / añadido en el control de código fuente, puede incluso hacer prueba de integración para asegurarse de que los Views son válidos.

Enlace a su página web: http://specsfor.com/SpecsForMvc/default.cshtml

Enlace al paquete Nuget: https://www.nuget.org/packages/SpecsFor .Mvc /

Enlace a github: https://github.com/MattHoneycutt/SpecsFor

Aquí está un fragmento de código tomado de la página web que muestra cómo usarlo.

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");
        }
    }
} 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top