unit-testing nunit mocking rhino-mocks typemock

unit testing - ¿RhinoMock contra TypeMock contra la burla de NUnit?



unit-testing mocking (4)

Estoy empezando a realizar el desarrollo basado en pruebas y me pregunto cuáles son las principales diferencias entre Rhockock, TypeMock y la burla incorporada de NUnit.

Cualquier información sería muy apreciada!


TypeMock es un producto comercial (lo que significa que tendrá que pagar por ello) pero le permitirá simular objetos concretos, a diferencia de RhinoMocks / NUnit / MoQ, que solo puede simular una interfaz / clase abstracta. La forma en que logra esto es la magia negra límite, pero hace algunas cosas muy inteligentes con el CLR.

Esto puede ser particularmente útil cuando usa bibliotecas en su proyecto que no usan muchas interfaces. Por lo tanto, podría, por ejemplo, usar TypeMock para simular un contexto de datos LINQtoSQL u objetos Sharepoint. Sin embargo, si está utilizando TypeMock, esto no es una excusa para un mal diseño en su aplicación .

Por lo que yo sé, aparte de las pequeñas diferencias de sintaxis, la mayoría de los marcos burlones se han alejado del antiguo modelo de grabación / reproducción. Comúnmente, usted configura sus simulacros al escribir las expectativas utilizando una Interfaz fluida.

Personalmente, solo he usado MoQ y yo <3 it.


Un video llamado TDD - Understanding Mock Objects por Roy Osherove es muy útil para aprender las diferencias entre las diferentes bibliotecas de mocking. Él no va en gran detalle de cada aspecto, pero lo suficiente para que lo entiendas. Espero que esto ayude. Roy también es el arquitecto jefe de TypeMock y es una figura muy influyente en el campo de las pruebas unitarias. No podría recomendar este video lo suficiente para alguien que quiera aprender a usar la burla y también a aprender sobre la biblioteca disponible.

La principal diferencia entre TypeMock y las bibliotecas de código abierto es que TypeMock utiliza la API del Perfilador provista por Microsoft en lugar de un proxy dinámico . Esto permite a TypeMock simular clases concretas y métodos estáticos. En caso de que no esté seguro de qué es el generador de perfiles, es la misma API que utilizan las herramientas como dotTrace de JetBrain y los perfiladores Ants .Net de RedGate. TypeMock solo usa la API de una manera diferente para falsificar (simular) lo que le dices.

@RichardOD, gracias por el recordatorio, su libro " El arte de las pruebas unitarias " explica con más detalle dónde no aparece el video. Soy dueño del libro y es muy informativo.


Uso TypeMock todo el tiempo y creo que es una herramienta muy poderosa que puede mejorar la cobertura de mis pruebas de unidad. Esto se debe a que trabajo con SharePoint y solo TypeMock me permite simular clases de SharePoint, ya que son clases concretas y no interfaces.

No es posible burlar las clases de SharePoint con RhinoMock, Moq, NUNit, etc. ya que (creo) requieren interfaces para simular objetos, en lugar de poder burlarse de las clases concretas.

Si su código utiliza muchas interfaces y no necesita clases concretas para burlarse, TypeMock es un poco caro, pero vale la pena por el poder que obtiene.


  • Rhino.Mocks es un marco de código abierto, desarrollado y mejorado continuamente por uno de los desarrolladores más prolíficos de la industria. Ha existido por un tiempo y por lo tanto soporta bastantes paradigmas diferentes para burlarse. Puede ser un poco más difícil aprender, por lo tanto, en el sentido de que puede encontrar tutoriales para la forma "antigua" de hacer las cosas. Aquí hay una sugerencia, SetUpResultFor () y Expect.Call () son las viejas formas de hacer las cosas. La nueva forma es mockObject.AssertWasCalled () .

No he tenido ninguna experiencia personal con estos otros, pero ...

  • MOQ es un marco de código abierto, desarrollado y mejorado continuamente por uno de los desarrolladores algo menos prolíficos de la industria (en comparación con Ayende). Es más nuevo y, por lo tanto, carece de algunas características que tiene Rhino.Mocks. Por lo general, esto no es un problema, ya que estas características tienden a ser obsoletas en Rhino. He escuchado que debido a esto es un poco más fácil de aprender (por cierto, los marcos burlones no son difíciles de aprender).
  • NUnit Mocks es muy pintoresco en cuanto a burlas. No es compatible con la sintaxis Arrange-Act-Assert preferida actualmente que confía en Expect-Verify (registro / reproducción). También se basa en cadenas para identificar los métodos y nombres de propiedades en lugar de las lambdas. Esto lo hace significativamente resistente a la refactorización. Este es un problema serio. Yo no lo recomendaría.
  • TypeMock Isolater es un marco burlón de pago por parte de una empresa (propiedad de?) Roy Osherove: un tipo que conoce sus pruebas, pero también tiene algunas opiniones levemente controvertidas sobre cómo aplicarlas. Es realmente intenso en cuanto a lo que puede hacer: bajar al nivel bajo y modificar cómo funcionan los objetos CLR. Sin embargo, la filosofía detrás de TypeMock no es realmente 100% TDD. Parte de los beneficios de TDD es que al adoptar las limitaciones de los marcos de Mocking, diseñará un mejor código. TypeMock rompe esas limitaciones a las piezas. Por lo que sé, la mayoría de las personas las utilizan para tratar de obtener un código sobre el que no tienen control.