tratar todos relacion reclama que propiedad por pareja otro novio mete mal los hacer hablar esta entiendes dias cuando con cansas bueno bien alguien c++ mocking googlemock

c++ - todos - ¿Es Google Mock un buen marco de burla?



que hacer cuando alguien se mete en tu relacion (4)

Soy pionero en los esfuerzos de pruebas unitarias en mi empresa y necesito elegir un marco de burla para usar. Nunca he usado un marco burlón antes. Ya hemos elegido Google Test, por lo que usar Google Mock sería bueno. Sin embargo, mis impresiones iniciales después de ver el tutorial de Google Mock son:

  • La necesidad de volver a declarar cada método en la clase simulada con una macro MOCK_METHODn parece innecesaria y parece ir en contra del principio DRY.
  • Sus comparadores (por ejemplo, el ''_'' en EXPECT_CALL (tortuga, Adelante (_)); y el orden de comparación parecen casi demasiado poderosos. Como, sería fácil decir algo a lo que no te refieres, y fallas en los errores de esa manera.

Tengo mucha confianza en los desarrolladores de Google y poca confianza en mi propia capacidad para juzgar los marcos burlones, nunca antes los había usado. Entonces mi pregunta es: ¿Son estas preocupaciones válidas?

¿O no hay una mejor manera de definir un objeto simulado, y son los emparejadores intuitivos para usar en la práctica? Apreciaría las respuestas de cualquier persona que haya usado Google Mock antes, y las comparaciones con otros marcos de C ++ serían útiles.


Descargo de responsabilidad: escribí HippoMocks.

Puedo recomendar mirar otros marcos burlones; Hay una clase de ellos que no te hacen repetirte. También eliminan una nueva sintaxis para hacer que su código se lea mucho más como C ++ combinado con inglés. ¡Darle una oportunidad!

http://www.assembla.com/wiki/show/hippomocks


He estado usando googletest + googlemock profesionalmente durante algunos años, y definitivamente me gusta. Una cosa que otros no han mencionado es que si ya estás comprometido con el uso de Google Googlet, entonces tiene mucho sentido también usar Googlemock. Están bastante bien integrados y comparten un estilo de diseño y filosofía similares, lo cual es bueno.

Por ejemplo, googlemock proporciona macros ASSERT_THAT() que son muy útiles y que coexisten muy bien con las afirmaciones de los googletests.

Sin embargo, te advertiría acerca de abusar del poder de googlemock. Puede ser extremadamente tentador escribir coincidencias muy complejas y potentes que terminan siendo totalmente ilegibles. Solo necesitas ser disciplinado cuando lo uses.

Algunos otros pensamientos:

  • Googlemock puede tener una curva de aprendizaje algo pronunciada; las complejidades de los emparejadores y las expectativas no son tan sencillas como podría esperarse.
  • La preocupación por violar DRY es válida; Es molesto tener que definir manualmente los simulacros cuando parece que podrían generarse automáticamente. Es bastante común que los equipos escriban sus propios generadores de código que definen automáticamente los googlemocks para sus interfaces.

Lo uso con frecuencia.

Es trivial hacer cosas relativamente fáciles, y es posible hacer cosas muy difíciles, eso es casi lo que quiero de un marco.

La parte más difícil de escribir Matchers personalizados (y otras cosas) con las simulaciones de Google no son las falsas de Google, son los errores de la plantilla de C ++ ... son casi imposibles de analizar. A menudo escribo expresiones complejas mediante la construcción incremental de una expresión funcional a partir de unas pocas expresiones menos complicadas. De esa manera, los errores de la plantilla son más fáciles de identificar.

No he visto una mejor opción para burlarse de c ++, y Google cubre mucho terreno, por lo que te sugiero que lo intentes.

WRT el principio DRY, estoy de acuerdo en que la declaración de los métodos burlados es desafortunada, pero sin reflexión, no estoy seguro de que c ++ tenga mucha suerte de lo contrario. Estoy casi seguro de que si hubiera un modo, Googlemock lo usaría;)

BTW: El libro de cocina googlemock es una buena referencia.


Fake-It es un simple marco burlón para C ++. FakeIt utiliza las últimas funciones de C ++ 11 para crear una API expresiva (aunque muy simple). Con FakeIt no es necesario volver a declarar los métodos ni crear una clase derivada para cada simulacro. Aquí es cómo usted Fake-It:

struct SomeInterface { virtual int foo(int) = 0; }; // That''s all you have to do to create a mock. Mock<SomeInterface> mock; // Stub method mock.foo(any argument) to return 1. When(Method(mock,foo)).Return(1); // Fetch the SomeInterface instance from the mock. SomeInterface &i = mock.get(); // Will print "1" cout << i.foo(10);

Hay muchas más características para explorar. Anímate y Fake-It .