2

ラッパーを書き込もうとしている OLE COM オブジェクトがあり、TDD を使用してそのコードを書き始めることにしました。書き込もうとしている内容の方向性をよりよく理解できると信じているからです。COM オブジェクトには、次のようなインターフェイスがあります。

Interface Mapinfo
    Sub [Do](ByVal cmd As String)
    Function Eval(ByVal cmd As String) As String
End Interface

[Do] コマンドは次のようになります。

Mapinfo.Do("OpenTable("""C:\Temp\MyTable.TAB""")")

今、私はラッパーを書こうとしているので、次のような関数があります:

Mapinfo.OpenTable("C:\Temp\MyTable.TAB")

今私が抱えている主な問題は、新しいテストといくつかのコードを作成するたびに、OLE オブジェクトのインスタンスを作成する必要があり、アプリケーションが開始するのを待ち (30 秒以上)、小さな関数をテストすることです。 OLE オブジェクトを閉じて破棄し、コードを変更してもう一度実行します。

私の質問は次のとおりです。毎回 OLE アプリを起動することなく、これらすべてを行うより良い方法はありますか? モック オブジェクトについて聞いたことがありますが、実際にはあまり調べていません。ここで役に立ちますか? もしそうなら、どのように?

編集: Mapinfo のモック オブジェクトを作成する必要があることに気付きました。私の質問は、さまざまな書式設定された文字列を取ることができるモック オブジェクトを作成するにはどうすればよいですか? これは、ラッパーのコードが正しいことを確認するのにどのように役立ちますか?

4

1 に答える 1

3

はい、モック オブジェクトが役立ちます。基本的に、Mapinfo インターフェイスをモックすることによって偽の Mapinfo オブジェクトを作成します (その IMapInfo の名前を変更する必要があります)。

次に、期待する呼び出しと返す結果 (適切な場合) をそのモックに指示します。モックが例外をスローしたり、実際のオブジェクトを使用して呼び出すのが難しい他のことを行うテストを作成することもできます。

2 つの大きな (そして無料の) .NET モッキング フレームワークは、MoQRhino Mocksです。Rhino はより成熟しており、モックを構成する方法が増えています。MoQ は新参者であり、Rhino よりも機能セットが小さく、期待値を設定する方法が少なくなっています。

個人的には、モッキングの初心者には MoQ の方が適していると思います。比較的理解しやすく、そこにあるすべてのドキュメントは現在のリリースに関連しており (Rhino のチュートリアルを検索すると、何年も前から不要になったジャンクが表示されます)、パフォーマンスも良好です。

于 2008-11-03T13:50:27.427 に答える