2012-09-26 26 views
6

¿Se pueden agrupar las pruebas unitarias de Googletest por categorías? Por ejemplo, "SlowRunning", "BugRegression", etc. Lo más parecido que he encontrado es la opción --gtest_filter. Al agregar/anteponer nombres de categoría a los nombres de la prueba o del accesorio, puedo simular la existencia de grupos. Esto no me permite crear grupos que normalmente no se ejecutan.Agrupamiento de pruebas de unidad googletest por categorías

Si no existen categorías en googletest, ¿hay un bien o mejor solución práctica?

Editar: Otra forma es utilizar los --gtest_also_run_disabled_tests. Agregar DISABLED_ al frente de las pruebas te da exactamente una categoría condicional, pero siento que estoy haciendo un mal uso de DISABLED cuando lo hago.

Respuesta

3

Una forma de usar la opción gtest_filter y usa la convención de nomenclatura para las pruebas (como describes en la pregunta).

TEST_F(Foo, SlowRunning_test1) {...} 
TEST_F(Foo, BugRegression_test1) {...} 
TEST_F(Foo, SlowRunningBugRegression_test1) {...} 

otro uso manera binarios separados/ejecutable para cualquier tipo de prueba. De esta manera tiene algunas limitaciones porque gtest utiliza el registro automático estático, por lo que si incluye algún archivo fuente, todas las pruebas implementadas en este archivo fuente se incluirán en el archivo binario/ejecutable generado.

Por mi opinión primer método mejor. Además, me gustaría implementado una nueva macro de registro de prueba para hacer la vida más fácil:

#define GROUP_TEST_F(GroupName, TestBase, TestName) \ 
#ifdef NO_GROUP_TESTS \ 
    TEST_F(TestBase, TestName) \ 
#else \ 
    TEST_F(TestBase, GroupName##_##TestName) \ 
#endif 
+0

Me gusta que Your GROUP_TEST_F formalice la convención de nomenclatura. Mejora el uso del filtrado. Todavía me gustaría que hubiera algo mejor que filtrar. – walrii

2

La única forma de ejecutar subconjunto de pruebas en un único ejecutable prueba es --gtest_filter. Hay dos soluciones para ejecutar, por ejemplo, pruebas de integración y pruebas de unidades

  1. Use una convención de nombres como Integration.Testname y Unit.Testname. Además de eso, también mantendría archivos de script como RunIntegration.bat y RunUnit.bat para ejecutar desde mis scripts de automatización de compilación para diferentes escenarios.
  2. Mantiene los ejecutables de prueba deferentes para la integración y la unidad u otras categorías. En los estudios visuales en tendrán proyectos separados para cada uno.
+0

me gusta la idea de ejecutables por separado, pero que, o bien significaría la segregación de las categorías en los archivos fuente separados o utilizando #defines y regenerar los archivos .o . Ninguno es muy apetecible. – walrii

+0

Probablemente no entiendo tu comentario. ¿Por qué crees que la segregación en archivos de prueba separados es una mala idea? A medida que su suite de pruebas crezca, será ventajoso modularizar la prueba, crear espacios de nombres profundos, etc., si su preocupación es sobre la reutilización/duplicación de código, entonces podría comenzar a usar un dispositivo de prueba común entre el tipo de prueba http://code.google.com/p/ googletest/wiki/V1_6_Primer # Test_Fixtures: _Using_the_Same_Data_Configuration_for_Multiple_Te – NiladriBose

+0

definitivamente creen en la segregación de las pruebas en archivos separados. Pero si tengo un archivo con las pruebas para X, no me gusta dividir una prueba en un archivo separado solo porque está en la categoría de "larga ejecución". Usar ejecutables separados para las categorías requeriría eso o recompilar el mismo archivo con #defines diferentes. – walrii