none
Aplicación mvc 5 funcionando no pasa test con acceso a Base de datos (EF6) RRS feed

  • Pregunta

  • He retomado una aplicación para realizar unos cambios, he generado una aplicación de test, pero los test de los controladores no están en rojo

    el test es el siguiente

      [TestMethod()]
            public void GetTelTest()
            {
                EsController controller = new EsController();
                var result = controller.GetTel(21130);
                Assert.AreEqual("949609900",result);
               // Assert.Fail();
            }

    el controlador

     [HttpPost]
            [NoDirectAccess]
            public ActionResult GetTel(int idLoc)
            {
              
                var locales = db.Locales.Find(idLoc);
                
                
                return Json(new { locales.Tfn }, JsonRequestBehavior.AllowGet);
               
               
    
    
            }

    el modelo

      using System.Data.Entity;
    
    namespace NetocioMvc.Models
    {
     
       
    
        public  class LocalesModels : DbContext
        {
    
     public LocalesModels()
                : base("LocalesModels")
            {
            }
           
    
            public virtual DbSet<Locales> Locales { get; set; }
    }
    }
    

    y el error

    Mensaje: El método de prueba NetocioMvc.Controllers.Tests.EsControllerTests.GetTelTest produjo la excepción: System.Data.SqlClient.SqlException: Error relacionado con la red o específico de la instancia mientras se

    establecía una conexión con el servidor SQL Server. No se encontró el servidor o éste no estaba accesible.

    Compruebe que el nombre de la instancia es correcto y que SQL Server está configurado para admitir conexiones

    remotas. (provider: SQL Network Interfaces, error: 26 - Error al buscar el servidor o instancia especificado)


    Evidentemente las conexiones a la BBDD están correctamente configuradas ya que la aplicación funciona correctamente en el entorno de desarrollo.

    ¿alguna idea? 

    domingo, 16 de julio de 2017 11:25

Respuestas

  • hola

    El error esta indicando que no puede conectarse a la base de datos, deberias crear en el proyecto de test un app.config y poner la definicion del connection string, o si lo tienes validar que sea correcto

    Esta claro que no es un unit test lo que estas creando sino usarias mock, sino que se requiere conexion a la db

    Ademas hay algo raro, el action retorna un json, pero tu lo comparas en el assert con un string, eso esta raro, por lo que veo ninca podria pasar ese test correctamente, mas alla del problema de conexion a sql server

    Del actionresult deberias tomar el json y parserlo usando json.net para extraer el valor que quieres validar en el assert

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta xmy552 martes, 18 de julio de 2017 16:46
    domingo, 16 de julio de 2017 13:03

Todas las respuestas

  • El problema es que la cadena de conexión a base de datos está configurada en el web.config, pero cuando ruedas el proyecto de test es un ejecutable distinto y su configuración no se toma del web.config.

    Para hacer este tipo de pruebas unitarias se utiliza normalmente inyección de dependencias. Se ubica el acceso a base de datos en una clase que actúa como repositorio, y se inyecta en el controlador a la hora de hacer las pruebas un repositorio ficticio que siempre devuelve unos datos fijos, en lugar de tomarlos de base de datos. De esa forma se consigue que la prueba sea realmente unitaria, puesto que solo se prueba el controlador, y no el acceso a base de datos (cosa que lo convertiría en una prueba de integración en lugar de una prueba unitaria).

    domingo, 16 de julio de 2017 12:46
  • hola

    El error esta indicando que no puede conectarse a la base de datos, deberias crear en el proyecto de test un app.config y poner la definicion del connection string, o si lo tienes validar que sea correcto

    Esta claro que no es un unit test lo que estas creando sino usarias mock, sino que se requiere conexion a la db

    Ademas hay algo raro, el action retorna un json, pero tu lo comparas en el assert con un string, eso esta raro, por lo que veo ninca podria pasar ese test correctamente, mas alla del problema de conexion a sql server

    Del actionresult deberias tomar el json y parserlo usando json.net para extraer el valor que quieres validar en el assert

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta xmy552 martes, 18 de julio de 2017 16:46
    domingo, 16 de julio de 2017 13:03
  • Gracias Leandro,

    ahora ya conecta el tema de json lo  tenia controlado pero con las prisas no puse el codigo correcto.

    un saludo

    martes, 18 de julio de 2017 16:48