2010-12-28 27 views
29

誰かがExcel VBAコードのユニットテストの経験がありますか?可能であれば、従来のExcel VBAコードにユニットテストを簡単に導入したいと思います。私が持っていた1つのアイデアは、VSTOを使用してExcelワークブック内からコードを呼び出すことでした。 Excelのコードを単体テストする目的でこれを試したことがあるかどうか、またExcel VBAの単体テストに使用した可能性のある他の方法についても知りたいと思います。ユニットテストの方法Excel VBAコード

Excel VBAコードの単体テストに関する利用可能なフレームワークやヒントについては、いくつかの参考にしていただきたいと思います。

+3

興味があるかもしれません:http://stackoverflow.com/questions/1792188/how-to-setup-a-unit-test-in-vba-excel-macro – Fionnuala

+0

ありがとう、私は見てみましょう。 –

答えて

6

私はちょうど同じことを探していた:http://accunit.access-codelib.net/ VBA IDEに非常にうまく統合されています。

注:ドイツ語でページを表示し、ブラウザの翻訳ツールを使用すると、英語ページより多くの情報が得られます。

+0

私は成功なしにRubberduckを試しました。一方、AccUnitは本当に簡単に動作させることができました。テストクラスを挿入するときにも例が示されます。 –

+0

@DavidDuran Rubberduckに問題がある場合、誰にもそれを修正しないと言っているわけではありません...フィードバックはいつでも歓迎します。[GitHub](https://github.com/rubberduck-vba/Rubberduck)または[SEチャット](https://chat.stackexchange.com/rooms/14929/vba-rubberducking)の戦争室でさえも。乾杯! –

26

免責事項:私はRubberduckのGitHubのリポジトリを所有し、私はこのプロジェクトに関わる開発者の一人です。

Rubberduckが現在開発中です。これは、しかし、VBAのためのユニットテストツールよりずっと以上だが、それはかなりうまく動作しますが、任意の決まり文句なしにかなりのVBAのユニットテストを書くことができます:

'@TestModule 
Private Assert As New Rubberduck.AssertClass 

'@TestMethod 
Public Sub TestMethod1() 
    Assert.Inconclusive "Test method is not written yet." 
End Sub 

'@TestMethod 
Public Sub AnotherTestMethod() 
    Assert.IsTrue False, "Something's wrong?" 
End Sub 

そして、あなたの試験方法をナビゲートし、実行するために取得しますドッキングされたツールウインドウでは、アレンジ・アサーションメソッド・スタブを素早く追加するためのメニューも提供されます。また、AssertClassもレイト・バインドできますので、開発以外の場所でRubberduckを配備することを心配する必要はありませんコードをコンパイル可能な状態に保ちます。 RubberduckのGitHubのリポジトリに


unit testing wiki pageは、それを使用する方法について説明しているほとんどすべてを説明します。


最新2.1プレリリースバージョンは、文字通りに標準ライブラリを回すことによって、通常のユニットテストを妨害する標準ライブラリ・コールの数をハイジャックするために使用することができ、「偽物」の枠組みの始まりを含みますより多くの機能をカバーするFakes APIは歓迎以上であることを拡大する

'@TestMethod 
Public Sub TestMethod1() 
    On Error GoTo TestFail 

    Fakes.MsgBox.Returns 42 ' MsgBox function will return 42 

    'here you'd invoke the procedure you want to test 
    Debug.Print MsgBox("This MsgBox isn't going to pop up!", vbOkOnly, "Rubberduck") 'prints 42 

    With Fakes.MsgBox.Verify ' Test will pass if MsgBox was invoked as specified 
     .Parameter "prompt", "This MsgBox isn't going to pop up!" 
     .Parameter "buttons", vbOkOnly 
     .Parameter "title", "Rubberduck" 
    End With 
TestExit: 
    Exit Sub 
TestFail: 
    Assert.Fail "Test raised an error: #" & Err.Number & " - " & Err.Description 
End Sub 

貢献:指定されているようRubberduckユニットテストのコンテキストで実行する場合MsgBox通話を例えば、動作するように設定することができ、「テスト偽物」。カバーFileSystemObjectの呼び出しは特に有用です。

3

xlwings人はどのようにしてunit tests VBA functions in Pythonをデモしましたか?本質的には、ワークブックに何も追加する必要はありませんが、VBA関数の実際の結果と期待値を比較できるように、VBA関数を呼び出す "スタンドアロン" Pythonコードを記述してください。