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

Special Thanks