En mi trabajo estamos usando Moq para burlarse y Unity para un contenedor IOC. Soy bastante nuevo en esto y no tengo muchos recursos en el trabajo para ayudarme a determinar las mejores prácticas que debería usar.Forma correcta de simular objetos del repositorio para pruebas unitarias usando Moq y Unity
En este momento, tengo un grupo de interfaces de repositorio (por ejemplo, IRepository1, IRepository2 ... IRepository4) que un proceso en particular necesita usar para hacer su trabajo.
En el código real puedo determinar todos los objetos de IRepository usando el contenedor IOC y usando el método RegisterType().
Estoy tratando de encontrar la mejor manera de poder probar el método que necesita los 4 repositorios mencionados.
Estaba pensando que podría registrar una nueva instancia del contenedor Unity IOC y llamar a RegisterInstance en el contenedor para cada objeto simulado que pase el valor Mock.Object para cada uno. Intento que este proceso de registro sea reutilizable, así que no tengo que seguir haciendo lo mismo una y otra vez con cada prueba unitaria a menos que una prueba unitaria requiera que algunos datos específicos vuelvan del repositorio. Aquí es donde radica el problema ... ¿cuál es la mejor práctica para configurar los valores esperados en un repositorio simulado? Parece que si llamo a RegisterType en el contenedor de Unity, perdería una referencia al objeto Mock real y no podría anular el comportamiento.
¡Gracias! Solo estaba viendo las cosas de la manera incorrecta. –
Le rocé la respuesta y estaba pensando si debería votar abajo o no (porque parecía que estabas recomendando usar contenedor IoC en pruebas unitarias) y luego realmente leí tu respuesta ... Quería decir, aquí está mi vergonzoso +1 . Si la gente lo encuentra útil incluso hoy, debe usar ** ArgumentNullException (nameof (repository)) ** y no ** ArgumentNullException ("repository") ** - la publicación se escribió hace 5-6 años cuando esta característica no existía . – Margus