C++で書かれた自家製のCOMコンポーネントがあります。ここでは、C#テストプロジェクトでその関数とイベントをテストしたいと考えています。機能テストはかなり簡単です。ただし、イベントはトリガーされません。COMイベントのユニットテストですか?
MyLib.MyClass m = new MyLib.MyClass();
Assert.IsTrue(m.doStuff()); // Works
// This does not work. OnMyEvent is never called!
m.MyEvent += new MyLib.IMyClassEvents_MyEventHandler(OnMyEvent);
m.triggerEvent();
私はこれを見つけて、StackOverflowで同様の問題について読んでいます。私はすべての提案された方法を試しましたが、それを動作させることはできません!
これまでのところ、active dispatcherでテストを実行しようとしましたが、成功しませんでした。私はまた、Dispatcher.PushFrame()
を使って手動でメインスレッドにメッセージをポンピングしようとしました。何もない。私の出来事は決して誘発しない。私は単純なWinFormsプロジェクトを作成し、私のイベントは通常の設定で動作することを確認しました。したがって、この問題は単体テストにのみ適用されます。
Q:アクティブなイベントハンドラを正常に起動できる通常のC#ユニットテストを作成するにはどうすればよいですか?
誰かがそこに働いているサンプルを持っているはずです!助けてください。
ユニットテストに失敗しました。 COMサーバーは、プログラムがイベントを生成する前にメッセージループをポンピングする必要がある傾向があります。それはSTA契約の一部です。サポートについては、コンポーネント作成者にお問い合わせください。 –
COMサーバーは私たち独自のコンポーネントであり、テストする必要があります。メッセージをポンピングすることは、あなたが言うように、不可欠です。だから問題は残る。あなたは単体テストでこれをどのように達成しますか? – l33t
@NOPsliderどのようなユニットテストフレームワークを使用していますか? NUnitのそれ以降のバージョンでは、デフォルトでMTAスレッドモデルが使用されます。 – vcsjones