La biblioteca de burla más popular y amigable para .net
var mauck = new Mock <IlovethisLibrary> (); // ¡GUAU! ¿No hay rareza de registro/reproducción? :) Mock.setup (biblioteca => biblioteca.downloadExists ("2.0.0.0")) .returns (verdadero); // Use la propiedad del objeto en el simulacro para obtener una referencia al objeto // implementando IlovethisLibrary y luego ejercerlo llamando // Métodos en él Ilovethislibrary adorable = mock.object; bool download = Lovable.downloadExists ("2.0.0.0"); // Verifique que el método dado se llamara con el valor esperado como máximo una vez Mock.verify (biblioteca => biblioteca.downloadExists ("2.0.0.0"), Times.atmoStonce ());
Moq también es la primera y única biblioteca hasta ahora en proporcionar Linq a las simulacros, de modo que el mismo comportamiento anterior se pueda lograr mucho más sucintamente:
IlovethisLibrary lovable = Mock.Of <ILoVETHISLibrary> (l => l.downloadExists ("2.0.0.0") == true); // Ejercar la instancia devuelta por Mock.of llamando a los métodos en él ... bool download = Lovable.downloadExists ("2.0.0.0"); // Simplemente afirme el estado devuelto: Afirmar.true (descargar); // Si quieres ir más allá de las pruebas estatales y quieres // Verifique la interacción simulada en su lugar ... Mock.get (adorable) .verify (biblioteca => biblioteca.downloadExists ("2.0.0.0"));
Puedes pensar en Linq para simulacros como "del universo de simulacros, darme uno cuyo comportamiento coincide con esta expresión".
¡Mira el inicio rápido para obtener más ejemplos!
Moq (pronunciado "simulador" o simplemente "simularse") es la única biblioteca burlona para .NET desarrollada desde cero para aprovechar al máximo los árboles de expresión de .NET Linq y las expresiones lambda, lo que la convierte en la más productiva, tipo segura y segura Biblioteca burlona de refactorización disponible. Y admite interfaces burlona, así como clases. Su API es extremadamente simple y directa, y no requiere ningún conocimiento o experiencia previa con conceptos de burla.
La biblioteca se creó principalmente para desarrolladores que actualmente no están utilizando ninguna biblioteca de burla (o están disgustadas con las complejidades de alguna otra implementación), y que generalmente están escribiendo manualmente sus propias simulacros (con más o menos "fanciness"). La mayoría de los desarrolladores en esta situación también son bastante pragmáticos y se adhieren a declarar TDD (o clásico). Es el resultado de la sensación de que la barrera de entrada de otras bibliotecas burladas es un poco alta, y es posible un enfoque más simple, más ligero y elegante. Moq logra todo esto aprovechando al máximo las características elegantes y compactas de lenguaje C# y VB conocidas colectivamente como LINQ (no son solo para consultas, como lo indica el acrónimo).
Moq está diseñado para ser una forma muy práctica, discreta y directa de configurar rápidamente las dependencias para sus pruebas. Su diseño de API ayuda incluso a los usuarios novatos a caer en el "pozo del éxito" y evitar los malos usos/abusos más comunes de burla.
Cuando se concibió, fue la única biblioteca burlona que fue en contra del enfoque de registro/reproducción generalizado y algo poco intuitivo (especialmente para los novatos) de todas las demás bibliotecas (y eso podría haber sido algo bueno;)).
No usar registro/repetición también significa que es sencillo mover las expectativas comunes a un método de configuración del accesorio e incluso anular esas expectativas cuando sea necesario en una prueba unitaria específica.
Puedes leer más sobre el "por qué" y ver algunas capturas de pantalla bonitas en el blog de KZU.
Vea nuestros ejemplos rápidos para tener una sensación de la API extremadamente simple e instalar desde Nuget.
Lea sobre el anuncio en el blog de KZU. Obtenga algunos antecedentes sobre el estado de las bibliotecas simuladas de Scott Hanselman.
Moq fue desarrollado originalmente por Clarius, Manas e Instedd.
MOQ utiliza Castle DynamicProxy internamente como el mecanismo de intercepción para permitir la burla.
MOQ ofrece las siguientes características:
Tipo fuerte: sin cadenas para las expectativas, sin valores de retorno de objetos o restricciones
Integración sin igual vs IntelliSense: todo es compatible con el completo vs Intellisense, desde la configuración de las expectativas, hasta especificar argumentos de llamadas de método, valores de retorno, etc.
No hay modismos de registro/reproducción para aprender. Simplemente construya su simulacro, configúrelo, úselo y opcionalmente verifique las llamadas (es posible que no verifique los simulacros cuando actúen solo como trozos, o cuando realice pruebas más clásicas basadas en el estado al verificar los valores devueltos del objeto bajo prueba )
Curva de aprendizaje muy baja como consecuencia de los tres puntos anteriores. En su mayor parte, ni siquiera necesita leer la documentación.
Control granular sobre el comportamiento simulado con una simple enumeración de flavos simulados (no es necesario aprender cuál es la diferencia teórica entre un simulacro, un trozo, un falso, un simulacro dinámico, etc.)
Burlarse de las interfaces y clases
Anular las expectativas: puede establecer expectativas predeterminadas en una configuración de accesorio y anular según sea necesario en las pruebas
Pase los argumentos del constructor para las clases burladas
Interceptar y elevar eventos en simulacros
Apoyo intuitivo para los argumentos out/ref
¡Apreciamos profundamente cualquier comentario que pueda tener! Siéntase libre de participar en el chat o informar un problema en el rastreador de problemas.
Obtenga más información sobre los patrocinadores de Github