2009-11-24 7 views
13

Sto lavorando a una macro VBA di Excel che prenderà un file excel, scrub/puliscilo e produrrà una cartella di lavoro con 2 fogli: il foglio 1 è il file "sporco" originale, il foglio 2 è il file pulito.Come impostare un test dell'unità in VBA Excel Macro?

Dal momento che abbiamo 10 diversi formati in questo momento e in fondo alla strada 40+. Vorrei salvare questo output per un determinato set di file, quindi scrivere un test unitario che prende l'input originale, esegue la nostra macro, quindi confronta l'output della macro con l'output previsto e salvato che abbiamo.

Quindi, in qualsiasi momento successivo durante la manutenzione, possiamo eseguire rapidamente e facilmente i nostri test unitari per assicurarci di non rompere nulla che già funzionava.

Questa è la prima volta che lavoro con VBA. Ho cercato su google per framework o plug-in e non ho trovato molto aiuto. Ho trovato una funzione che confronterà 2 fogli di calcolo Excel interi, quindi ho questa parte in meno. Ma ora ho bisogno di capire come effettivamente scrivere ed eseguire questo test unitario. Scrivere il test unitario dovrebbe essere abbastanza semplice, ma come eseguirlo? Non voglio inserire un pulsante nel foglio di calcolo che dice "Esegui test di unità" ... Esiste un modo in VBA/Excel per eseguire semplicemente una funzione arbitraria, quindi posso semplicemente dire clic con il tasto destro sulla mia funzione UnitTest e fare 'correre'?

Qualsiasi ulteriore feedback su ciò che i miei piani per il test di unità sarebbe anche apprezzare. Grazie ancora.

risposta

9

Se si trattasse di me, vorrei creare un secondo foglio di calcolo che fa riferimento il foglio da testare. (Vai a strumenti> riferimenti> sfoglia) Questa nuova cartella di lavoro può contenere tutti i test desiderati senza dover sporcare la cartella di lavoro principale. Questo ti libera anche per costruire un'interfaccia per te stesso, se ne vuoi uno.

Come nota a margine, se si desidera nascondere le procedure dal menu di macro di Excel, ma hanno ancora accesso ad essi, nella parte superiore del vostro put modulo:

Option Private Module 

poi fare tutte le procedure che si desidera a essere in grado di utilizzare "Pubblico". È quindi possibile chiamarli dalla finestra immediata (ctrl-g nel VBE) ma non verranno elencati nell'elenco delle macro.

Ma se si mantengono separati i test dell'unità (come probabilmente dovrebbe), non è necessario preoccuparsi dei moduli pubblici/privati.

+0

Grazie per il suggerimento dell'opzione Modulo privato .. – peege

5

non ho guardato in anni, ma vbaUnit utilizzato per lavorare bene ...

+0

grazie, era già a conoscenza, ma non ero sicuro di come dovrei confrontare i fogli. grazie a tutti – dferraro

1

Certo, sotto la Developer Tab (Excel 2007) c'è un tasto macro che elencano tutte le macro disponibili che è possibile eseguire . Scegli dall'elenco e fai clic su Esegui. Le versioni precedenti hanno questa stessa funzionalità, ma non riesco a ricordare dove si trovano.

Questo è il link per la versione 2003

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

8

Rubberduck è un componente aggiuntivo VBE gratuito e open source che include un framework di verifica unità integrato IDE e funziona sulla maggior parte dei principali prodotti Office.

  1. Scaricare e installare latest release.
  2. Aprire la cartella di lavoro di Excel in cui risiede il progetto VBA.
  3. Passare a Strumenti >> Refrences e aggiungere un riferimento a Rubberduck.
  4. Aggiungere un nuovo modulo standard.
  5. aggiungere l'attributo '@TestModule e creare un'istanza della Rubberduck.AssertClass

    `@TestModule 
    
    Private Assert As Rubberduck.Assert 
    
  6. Iniziare a scrivere i test. Qualsiasi Sub pubblico contrassegnato con l'attributo '@TestMethod verrà rilevato ed eseguito da Test Explorer.

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

Unit Test Explorer

Per ulteriori informazioni, vedere il Unit Testing page of the project's wiki.

Disclaimer:Sono uno degli sviluppatori del progetto.

+0

Grandi informazioni. Per quello che vale, le istruzioni sul wiki collegato sono più aggiornate delle istruzioni fornite qui. – epotter