したいこと
VBAでTDDしたい。
VBAで単体テストを行いたい。
VBAでテスト駆動開発をしたい。
これは、VBAのコードのメンテナンス・コードの品質を上げたいという要望と等しいです。
テストの実行方法
今回はVBAのAriawaseを利用して、単体テストを行う手順を書きます。
元は、ClockAhead 開発Blogさんの記事を参考にしました。参考記事作成時間が経っており異なる部分がありますので、記事に記しておきます。
- GithubのAriawaseを”Clone or download”ボタンを押して、ダウンロードしてください。(画像の赤囲みの部分・右側)
- .zip解凍して、”Assert.bas”,”Core.bas”, “Func.cls”をご自分のVBEプロジェクトにドラッグ&ドロップしてください。
- そして、記事にあるModule1, Module1Testクラスを作成してください。
- 私はここでつまづきましたが、add_正常系_Test()の中にある(変更前)Assert.AreEqualVal ⇒ (変更後)Assert.AreEqual と、Valを削除してください。 (*1)
- add_異常系_Test()の関数、三行をコメントアウトしてください。(*2)
- 代わりにadd_異常系_Test()の関数として、Assert.AreNotEqualを追加しました。
- VBE⇒表示⇒イミディエイトウィンドウを表示
- Assert.TestRunnerGenerateと入力して、エンターを押してください。
- Assert.RunTestと入力してEnterを押してください。
- 成功した場合の画像は以下のようになります。
- この後、同じテストを繰り返す場合は、 Assert.RunTest のみ入力してください。
- またテストクラスやメソッドを追加した場合は、、Assert.TestRunnerClear を入力して、エンターをを押してください。再度Assert.TestRunnerGenerateとAssert.RunTestを入力してください。
(*1) どうも、参考記事のころからAriawaseが変更された模様です。
(*2) エラーが発生します。私の環境では、「実行時エラー440: オートメイションエラーです。」が発生していました。
環境
Windows10,Excel2016 にて確認しています。
その他注意点
「実行時エラー’1004’:プログラミングによる Visual Basic プロジェクトへのアクセスは信頼性に欠けます。」が出た場合の対処方法として、以下のように対処してください。
1.ファイル⇒2.オプション⇒3.セキュリティーセンター⇒4.「セキュリティーセンターの設定」ボタン⇒5.「マクロの設定」タブ⇒6.開発者向けマクロ設定の「VBAプロジェクトオブジェクト モデルへのアクセスを信頼する」チェックボックスにチェックを入れて、7.”OK”ボタンを押して、設定を有効にしてください。
まとめ
C#の人なので、生まれて初めてVBA/VBEを触りましたが、何とか行けた感じでほっとしています。これでテストができるのですが、気になる点として
- add_異常系_Test()の関数で起こったエラー等
- テストを忘れないようにする工夫
があります。またこちらに関しては、対応策や何か良い工夫があれば、紹介したいと思います。
2018/06/29追記
実際に、以下の記事で使用したエクセルの中にもそのまま同梱しています。SJISコード取得の関数のテストにTDD使用しています。参考にダウンロードして、テストしてみてください。