2010-01-16 19 views

Respuesta

5

Supongo que quiere probar el código VBA en módulos.
En primer lugar, incluso si hubiera un buen marco de pruebas de unidades disponible para VBA, sospecho que las pruebas serían muy complejas, debido a las dependencias con el propio Libro de trabajo. Si tu código interactúa con el libro de trabajo y sus objetos va a ser una pesadilla total porque no puedes burlarte de nada de esto: imagine probar un módulo que lea datos en una hoja y cree una tabla en otra ... En esencia , un libro de Excel combina su persistencia, dominio y presentación, todo en uno, lo que no es bueno para las pruebas.
El otro caso es un código que está principalmente orientado a la computación. Si ese código se vuelve lo suficientemente complejo como para justificar las pruebas, una cosa que podría considerar es mover su código fuera de VBA, para que sea comprobable. A menudo trabajo con clientes que tienen grandes modelos financieros, con VBA pesado, y cuando puedo me gusta extraer el código VBA a C# y convertirlo en un complemento de VSTO. El beneficio es que puedo probar el código y trabajar en Visual Studio, en lugar del VBA IDE.

3

Hay un par de experimentos dando vueltas por Internet: EUnit y VBAUnit. Ninguno de estos proyectos parece tener comunidades activas, por lo que es poco probable que sean tan sólidos como (digamos) JUnit o NUnit. Pero pueden ser lo suficientemente buenos para tus propósitos.

+0

Esto es bueno ... Estoy convenciendo a mi amigo actuario para que intente jugar con eunit – jayunit100

3

Yo uso Debug.Assert. Organizo las pruebas en módulos. En cada módulo mantengo un Sub RunAll que llama a todos los métodos de prueba en ese módulo.

Para ejecutar todas las pruebas en el proyecto, tengo un módulo AllTests con RunAll que llama a RunAll en todos los módulos de prueba.

Simple y funciona muy bien sin ningún problema.

MSDN article on VBA Debug.Assert

1

escribí un post sobre cómo se puede utilizar la infraestructura unittest de Python fácilmente para escribir pruebas unitarias para VBA, sino también la lógica de células en general: https://www.zoomeranalytics.com/blog/unittests-for-microsoft-excel

En esencia, puede probar lo siguiente VBA función:

Function mysum(x, y) As Double 
    mysum = x + y 
End Function 

utilizando la siguiente unittest en Python:

import unittest 
import xlwings as xw 

class TestMyBook(unittest.TestCase): 
    def setUp(self): 
     # setUp will be called before the execution of each unit test 
     self.wb = xw.Book('mybook.xlsm') # map workbook 
     self.mysum = self.wb.macro('Module1.mysum') # map function 

    def test_mysum(self): 
     result = self.mysum(1, 2) # get result from VBA 
     self.assertAlmostEqual(3, result) # test if result corresponds to the expected value 

if __name__ == '__main__': 
    # This allows us to easily run the tests from the command prompt 
    unittest.main() 
1

Me sorprende no encontrar Rubberduck entre las otras sugerencias. Es un complemento COM para VBE (para todos los hosts de MS Office: Excel, Word, PowerPoint, Access), de código abierto y en desarrollo activo. Sus características principales son pruebas unitarias e inspecciones de código.

una breve descripción, tomada de la página wiki vinculado anteriormente:

Por qué RubberDuck?

Porque queremos un proyecto de mascota, y este es divertido y desafiante. La idea es hacer todo lo posible para que la programación en VBA y refactorice el código VBA heredado, tan agradable como en las versiones modernas de de Visual Studio. El VBE ha tenido su sensación VB6 durante el tiempo que puedo recordar, Rubberduck lo toma ... en otro lugar.

Todo comenzó en Code Review, con una publicación sobre pruebas de unidades en VBA. Se convirtió en una solución de trabajo 100% VBA, y luego queríamos tener esta funcionalidad de prueba unitaria integrada en el IDE - la solución COM complemento comenzó con él.

Tener acceso a todo el modelo de objeto VBE en un complemento COM que puede añadir menús personalizados, barras de herramientas y ventanas acoplables, quisimos analizar e inspeccionar el código y corregir los problemas - o al menos señalarlas .

Luego pensamos empaquetar todo lo que queremos implementar en extender el VBE. Añadimos formas de navegar el código más fácilmente, una lista de elementos todo, y luego tuvimos ideas como integrar el control fuente, implementando algunas refactorizaciones, usando la API Stack Exchange para crear y publicar su código VBA como una pregunta de Revisión de código .

Lo he estado utilizando durante aproximadamente medio año (principalmente en Excel 2010), y ha sido bastante estable y útil. Por lo tanto, lo recomendaría.

Cuestiones relacionadas