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.
Puede ser de interés: http://stackoverflow.com/questions/1792188/how-to-setup-a-unit-test-in-vba-excel-macro – Fionnuala
Gracias, voy a echar un vistazo. –