2009-11-24 19 views
13

Estoy trabajando en una macro de Excel VBA que tomará algún archivo de Excel, lo depurará/limpiará y generará un libro de trabajo con 2 hojas, siendo la hoja 1 el archivo original "sucio", la hoja 2 es el archivo limpio.¿Cómo configurar una prueba unitaria en VBA Excel Macro?

Dado que tenemos 10 formatos diferentes en este momento, y en el futuro 40+ .. Me gustaría guardar esta salida para un conjunto determinado de archivos, luego escribir una prueba de unidad que toma la entrada original, ejecuta nuestra macro, luego compara el resultado de la macro con el resultado esperado y guardado que tenemos.

Luego, en el futuro, cuando realicemos el mantenimiento, podemos ejecutar de manera rápida y sencilla nuestras pruebas unitarias para asegurarnos de no romper nada de lo que ya funcionó.

Esta es la primera vez que trabajo con VBA. Buscaba marcos o complementos en Google y no encuentro mucha ayuda. Encontré una función que comparará 2 hojas de cálculo completas de Excel, así que tengo esa parte baja. Pero ahora necesito descubrir cómo escribir y ejecutar realmente esta prueba unitaria. Escribir la prueba unitaria debería ser bastante directo, pero ¿cómo lo ejecuto? No quiero poner un botón en la hoja de cálculo que diga 'ejecutar pruebas unitarias' ... ¿Hay alguna manera en VBA/Excel de ejecutar simplemente una función arbitraria, por lo que puedo simplemente hacer clic derecho en mi función UnitTest y hacer 'correr'?

Cualquier comentario adicional sobre lo que mis planes para las pruebas unitarias también se apreciarían. Gracias de nuevo.

Respuesta

9

Si fuera yo, me gustaría crear una segunda hoja de cálculo que hace referencia a la hoja a ensayar. (Vaya a herramientas> referencias> navegar) Este nuevo libro de trabajo puede contener todas las pruebas que desee sin tener que ensuciar su libro de trabajo principal. Esto también lo libera para construir una interfaz para usted si lo desea.

Como nota al margen, si desea ocultar los procedimientos en el menú macro de Excel, pero todavía tienen acceso a ellos, en la parte superior de su puesto módulo:

Option Private Module 

A continuación, realice todos los procedimientos que desea a poder usar "Público". Luego puede llamarlos desde la ventana inmediata (ctrl-g en el VBE) pero no aparecerán en la lista de macros.

Pero si mantiene las pruebas unitarias separadas (como probablemente debería), entonces realmente no tiene que preocuparse por los módulos públicos/privados.

+0

Gracias por la opción Módulo privado consejo .. – peege

5

no lo he mirado en años, pero vbaUnit utilizado para trabajar bien ...

+0

gracias, ya era consciente de ello, pero no estaba seguro de cómo debería comparar las hojas. gracias a todos – dferraro

1

Claro, bajo la ficha Programador (Excel 2007) hay un botón de macros que lista todas las macros disponibles que se pueden ejecutar . Debería elegir de la lista y hacer clic en Ejecutar. Las versiones anteriores tienen esta misma funcionalidad, pero no recuerdo dónde están ubicadas.

Aquí hay un enlace para la versión 2003

http://spreadsheets.about.com/od/advancedexcel/ss/excel_macro_5.htm

8

Rubberduck es un complemento VBE gratuito y de código abierto que incluye un marco IDE Unit Testing integrado y funciona en la mayoría de los principales productos de Office.

  1. Descargue e instale el latest release.
  2. Abra el libro de Excel en el que reside su proyecto VBA.
  3. Vaya a Herramientas >> Refrences y agregue una referencia a Rubberduck.
  4. Agregue un nuevo módulo estándar.
  5. Añadir el atributo '@TestModule y crear una instancia de la Rubberduck.AssertClass

    `@TestModule 
    
    Private Assert As Rubberduck.Assert 
    
  6. Comience a escribir pruebas. Cualquier subtítulo público marcado con el atributo '@TestMethod será descubierto y ejecutado por el Explorador de prueba.

    '@TestMethod 
    Public Sub OnePlusOneIsTwo() 
        Assert.AreEqual 2, Add(1,1) 
    End Sub 
    

Unit Test Explorer

Para obtener más información, ver la Unit Testing page of the project's wiki.

Descargo de responsabilidad:Soy uno de los desarrolladores del proyecto.

+0

Gran información. Por lo que vale, las instrucciones en el wiki vinculado son más actuales que las instrucciones dadas aquí. – epotter

Cuestiones relacionadas