visual unitarias unit test studio software pruebas para interfaz ejemplos ejecución c++ unit-testing parsing stub

c++ - test - software para pruebas unitarias



Análisis de C++ para generar pruebas de unidad (9)

Recientemente he estado intentando crear pruebas de unidades para algún código heredado.

He estado tomando el enfoque de usar el enlazador para mostrarme qué funciones causan errores de enlace, greping la fuente para encontrar la definición y crear un stub de eso.

hay una manera mas facil? ¿Hay algún tipo de analizador de C ++ que pueda darme definiciones de clase, en alguna forma fácil de usar, desde la cual pueda generar stubs?


Es posible que desee investigar http://os.inf.tu-dresden.de/vfiasco/related.html#parsing . Pero el análisis de C ++ es difícil.

Por otro lado, tal vez ctags o algo similar pueden extraer definiciones de clase ...

También puede intentar escribir su propio analizador simple (?) Para generar resúmenes de clase a partir de archivos de encabezado ...

Traté de darte algunos consejos. Como puede ver, el problema no es fácil. Pero con suerte puedes automatizar al menos parte de él.


Si está en la plataforma de Windows, es posible que desee echarle un vistazo al proyecto de Microsoft Phoenix . Es un nuevo marco de compilación que te permite conectarte a cualquier etapa del proceso de compilación.


doxygen generalmente puede analizar lo suficiente de C ++ para crear documentación para el código. También tiene una opción de salida XML.



Gcc XML se utiliza en algunos proyectos, como FFI automático para Common Lisp. Se vincula con el compilador de G ++ para generar XML que representa la fuente. A partir de ahí, cualquier herramienta de procesamiento XML podría ayudarlo a alcanzar su objetivo.


¿ Miraste a Mockcpp , AMOP y Mockpp ? Podrías ver cómo analizan C ++, si ninguno de ellos se ajusta a tus necesidades.


El proyecto Eclipse CDT proporciona un analizador avanzado de C ++. La interfaz es bastante fácil. El siguiente fragmento de código puede dar suficiente pista.

ITranslationUnit tu = CoreModelUtil.findTranslationUnit (archivo);
ICElement [] elements = tu.getChildren ();

IStructure structure = (IStructure) elemento;
IMethodDeclaration [] methods = structure.getMethods ();
IField [] field = structure.getFields ();


La herramienta abi-compliance-checker se puede usar como un analizador de archivos de cabecera C / C ++:

abi-compliance-checker -lib NAME -dump VER.xml -headers-only -xml -stdout > api.xml

VER.xml archivo de entrada VER.xml es el siguiente:

<version> 1.0 </version> <headers> /path1/to/header(s)/ /path2/to/header(s)/ ... </headers>

El archivo de salida api.xml contiene firmas de funciones y otra información de los archivos de encabezado en la forma estructurada:

... <symbol> <id>37348</id> <mangled>_ZN7MWidget11qt_metacallEN11QMetaObject4CallEiPPv</mangled> <short>qt_metacall</short> <class>13749</class> <header>mwidget.h</header> <line>45</line> <return>44</return> <spec>virtual</spec> <parameters> <param> <name>p1</name> <type>4078</type> <algn>4</algn> <pos>0</pos> </param> <param> <name>p2</name> <type>44</type> <algn>4</algn> <pos>1</pos> </param> <param> <name>p3</name> <type>3905</type> <algn>8</algn> <pos>2</pos> </param> </parameters> </symbol> ...

Consulte también información sobre la herramienta api-cordura-corrector , que puede generar casos de prueba de unidad básica para cada función en la API a través del análisis de declaraciones en archivos de encabezado.


Si está en una plataforma que usa el formato de depuración DWARF (principalmente UNIX), puede usar libdwarf para analizar la información de depuración y extraer información sobre todo (prototipos de funciones, definiciones de clases, etc.). Mucho más estructurado y más fácil de analizar que C ++.