2010-12-28 22 views
29

¿Alguien tiene alguna experiencia con la unidad de prueba de código Excel VBA? Quiero introducir pruebas unitarias en algún código Excel Excel VBA de la manera más sencilla posible. Una idea que tuve fue usar VSTO para llamar al código desde el libro de Excel. Me gustaría saber si otros han intentado esto con el propósito de probar el código de Excel, así como cualquier otro método que puedan haber usado para probar unidades de Excel VBA.Cómo probar la unidad Código de Excel VBA

Agradecería algunos consejos sobre cualquier marco disponible y/o consejos sobre la unidad de prueba de código Excel VBA también.

+3

Puede ser de interés: http://stackoverflow.com/questions/1792188/how-to-setup-a-unit-test-in-vba-excel-macro – Fionnuala

+0

Gracias, voy a echar un vistazo. –

Respuesta

6

Estaba buscando lo mismo y encontré: http://accunit.access-codelib.net/ que se integra bastante bien en el IDE de VBA.

Nota: Ver la página en alemán y usar las herramientas de traducción del navegador parece dar más información que las páginas en inglés.

+0

He probado Rubberduck sin éxito. Por otro lado, AccUnit ha sido realmente fácil de hacer que funcione. Incluso dan ejemplos al insertar una clase de prueba. –

+0

@DavidDuran si Rubberduck tiene un problema, no decirle a nadie que no va a arreglarlo ... Los comentarios siempre son bienvenidos, ya sea en [GitHub] (https://github.com/rubberduck-vba/Rubberduck) o incluso nuestra sala de guerra en [SE chat] (https://chat.stackexchange.com/rooms/14929/vba-rubberducking). ¡Aclamaciones! –

26

Negación: Soy dueño de repositorio GitHub de RubberDuck, y yo soy uno de los desarrolladores involucrados en el proyecto.

Rubberduck está en desarrollo activo. Es mucho más que una herramienta de prueba de la unidad de VBA sin embargo, pero funciona bastante bien y le permite escribir pruebas unitarias VBA prácticamente sin ningún tipo repetitivo:

'@TestModule 
Private Assert As New Rubberduck.AssertClass 

'@TestMethod 
Public Sub TestMethod1() 
    Assert.Inconclusive "Test method is not written yet." 
End Sub 

'@TestMethod 
Public Sub AnotherTestMethod() 
    Assert.IsTrue False, "Something's wrong?" 
End Sub 

Y entonces se llega a navegar y ejecutar sus métodos de prueba en una ventana de herramientas acoplada que también le brinda menús para agregar rápidamente ordenar arreglos-actuar-afirmar, y el AssertClass también puede estar atrasado, por lo que no tiene que preocuparse por implementar Rubberduck en otro lugar que no sea su desarrollo entorno solo para mantener el código compilable.


El unit testing wiki page el repositorio GitHub de RubberDuck explica casi todo lo que hay que explicar acerca de su uso.


Los últimos 2.1 versiones preliminares incluye los inicios de un marco "falsificaciones" que se pueden utilizar para secuestrar un número de llamadas de la biblioteca estándar que normalmente interfieren con las pruebas de unidad, girando literalmente la biblioteca estándar en "falsificaciones de prueba" que puede ser configurado para comportarse como se especifica cuando se ejecuta en el contexto de una prueba de unidad RubberDuck, por ejemplo MsgBox llamadas:

'@TestMethod 
Public Sub TestMethod1() 
    On Error GoTo TestFail 

    Fakes.MsgBox.Returns 42 ' MsgBox function will return 42 

    'here you'd invoke the procedure you want to test 
    Debug.Print MsgBox("This MsgBox isn't going to pop up!", vbOkOnly, "Rubberduck") 'prints 42 

    With Fakes.MsgBox.Verify ' Test will pass if MsgBox was invoked as specified 
     .Parameter "prompt", "This MsgBox isn't going to pop up!" 
     .Parameter "buttons", vbOkOnly 
     .Parameter "title", "Rubberduck" 
    End With 
TestExit: 
    Exit Sub 
TestFail: 
    Assert.Fail "Test raised an error: #" & Err.Number & " - " & Err.Description 
End Sub 

Aportes para expandir esa Fakes API para cubrir más funciones son más que bienvenidos. Cubrir FileSystemObject invocaciones sería particularmente útil.

3

Los tipos xlwings solo demostraron cómo unit tests VBA functions in Python. Básicamente, no es necesario que agregue nada a su libro de trabajo, pero califica el código Python "autónomo" que llama a sus funciones de VBA para que pueda comparar los resultados esperados con los reales de sus funciones de VBA.

Cuestiones relacionadas