none
NunitTest controller RRS feed

  • Pregunta

  • Buenas estoy intentando realizar una prueba unitar en mi controlador, el cual obtiene todos mis contacto, el problema que a la hora de instanciar el controlador me pide que le pase como parámetro el contexto, lo que no sabia como hacer es pasar el contexto para que no llegue en null, tendría que hacer un configuración en el steup?. 

    Espero su ayuda, saludos!.  Le paso el codigo:

    public class Tests
    {
    private CoelsaDbContext context;

    [SetUp]
    public void Setup()
    {

    }

    [Test]
    public async Task GetContacts()
    {
    var controller = new ContactController(context);
    var result = controller.GetContacts();

    }
    }

    ====================================

    [Route("api/[controller]")]
        [ApiController]
        public class ContactController : ControllerBase
        {
            private readonly CoelsaDbContext _context;

            public ContactController(CoelsaDbContext context)
            {
                _context = context;
            }

            // GET: api/Contact
            [HttpGet]
            public async Task<ActionResult<IEnumerable<Contact>>> GetContacts()
            {
                return await _context.Contacts.ToListAsync();
            }


    José Maria Antunez

    sábado, 26 de diciembre de 2020 18:51

Respuestas

  • Tienes que crear un "Fake" para el ControllerContext y asignárselo al controlador después de instanciarlo con el "new" y antes de llamar al método de acción.

    El Fake puede ser más o menos complejo dependiendo de la funcionalidad que tengas que testear. Por ejemplo, si no vas a usar el Session o las Cookies, no hace falta que el Fake tenga código para soportarlas.

    Hay bastantes ejemplos circulando por la red. Por ejemplo, puedes guiarte por este artículo:

    https://weblogs.asp.net/stephenwalther/asp-net-mvc-tip-12-faking-the-controller-context

    Al final del texto tiene un enlace para descargar el "Fake", y todo el texto del artículo se dedica a explicar cómo usarlo dependiendo de cuáles sean las funciones de contexto que sean utilizadas en tu método de acción.

    • Marcado como respuesta EricRRModerator lunes, 28 de diciembre de 2020 17:26
    sábado, 26 de diciembre de 2020 19:47

Todas las respuestas

  • Tienes que crear un "Fake" para el ControllerContext y asignárselo al controlador después de instanciarlo con el "new" y antes de llamar al método de acción.

    El Fake puede ser más o menos complejo dependiendo de la funcionalidad que tengas que testear. Por ejemplo, si no vas a usar el Session o las Cookies, no hace falta que el Fake tenga código para soportarlas.

    Hay bastantes ejemplos circulando por la red. Por ejemplo, puedes guiarte por este artículo:

    https://weblogs.asp.net/stephenwalther/asp-net-mvc-tip-12-faking-the-controller-context

    Al final del texto tiene un enlace para descargar el "Fake", y todo el texto del artículo se dedica a explicar cómo usarlo dependiendo de cuáles sean las funciones de contexto que sean utilizadas en tu método de acción.

    • Marcado como respuesta EricRRModerator lunes, 28 de diciembre de 2020 17:26
    sábado, 26 de diciembre de 2020 19:47
  • Hola,

    ¿Alguna novedad sobre la consulta realizada?

    Espero su respuesta.

    Gracias por usar los foros de MSDN.

    Eric Ruiz

    ____________________________

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    lunes, 28 de diciembre de 2020 15:30
    Moderador
  • Hola no entendi, como usar el fake, yo tengo que pasarle mi contexto a mi controllador y no se como instamciarlo manuelamente.

    José Maria Antunez

    lunes, 28 de diciembre de 2020 17:37
  • Fíjate en el enlace que te puse. En el artículo vienen los ejemplos completos de cómo se instancia el fake y cómo se le pasa al controller.

    martes, 29 de diciembre de 2020 9:42