Excel VBAで テスト駆動開発してみる

2年前に、VB Lite Unitをいじっていたことがあるが、 より未来派ハッカーに近づいたいま、改めていじってみる。

クラスモジュールでないとテストできない

VBAには、ユーザフォーム、標準モジュール、クラスモジュールの3種類のコードの種類がある。 VBLiteUnitでは、クラスモジュールに対してテストを実施する。

クラスモジュールっなんだっけ?という僕たちには、以下のリンクが参考になる。

テスト実行用マクロをつくる

以下のようなSubプロシージャを用意することで、テスト実行をマクロにする。

Public Sub RunAllTests
        Runtests New Tst_Data
End Sub

テスト実行用のVBSをつくる

コマンドラインからRunAllTestsを実行したい。

以下を参考にして、Excelのマクロをコマンドラインから実施するためのVBSを作成。


Dim objExcelApp ,objExcelBook
Dim macro_path

macro_path = “C:\cygwin\home\TSUNEMICHI\repo\vba-study\sample\test.xlsm”

Set objExcelApp = CreateObject(“Excel.Application”) Set objExcelBook = objExcelApp.Workbooks.Open(macro_path, , True)

objExcelApp.Run ”’” + macropath + ”‘!ThisWorkbook.reloadModule” objExcelApp.Run ”’” + macropath + ”‘!ThisWorkbook.runAllTests”

objExcelBook.Saved = True objExcelBook.Close False Set objExcelBook = Nothing Set objExcelApp = Nothing

テスト実行用のRakefile作成

TDDっぽくするために、rakefileを作成してみた。rake testでテストを実行する。


require 'rake/clean'

FILE_PATH = “./test.xlsm”

task :default => “open”

task :open do cygstart #{FILE_PATH} end

task :test do cygstart test.vbs end

テストコード作成

src/testディレクトリ配下にそれぞれ作成。