2年前に、VB Lite Unitをいじっていたことがあるが、 より未来派ハッカーに近づいたいま、改めていじってみる。
VB Lite Unitでの記法まとめ | Futurismo
クラスモジュールでないとテストできない
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 "'" + macro_path + "'!ThisWorkbook.reloadModule"
objExcelApp.Run "'" + macro_path + "'!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ディレクトリ配下にそれぞれテストコード作成。
完成品
githubにアップ。
https://github.com/tsu-nera/ExcelVBA_TDD_Sample