2016-10-10 7 views
0

をイベントを発生させる:部品番号でMOQ:どのようにこのinterace考えてみnull以外の送信者と

public interface IFoo 
{ 
    event EventHandler SomethingHappened; 
} 

を、私はインターフェイスのモックを作成し、そして今、私はイベントを発生します:

var myMock = new Mock<IFoo>(); 
myMock.Raise(x => x.SomethingHappened += null, EventArgs.Empty); 

これは完全に機能しますが、問題は、送信者が送信者(実際にイベントを発生させるIFoo)であり、nullではないと予想していることです。

そこで私はこのようなイベントを発生させるたい:

myMock.Raise(x => x.SomethingHappened += myMock.Object, EventArgs.Empty); 

が、コンパイラがいることを許可されません - それは一見にのみ送信者としてnullを受け入れます。何故ですか?私が本当にしたいことをする方法はありますか?

+0

あなたはどのようなエラーを取得しない形で標準の引数になります部品番号のフレームワーク、イベント/デリゲートを伝える

myMock.Raise(x=>x.SomethingHappened += null,myMock.Object, EventArgs.Empty);

x.SomethingHappened += null、 ?また、「SomethingHappened」の署名は何ですか? – meJustAndrew

+0

お試しください 'myMock.Raise(x => x.SomethingHappened + = null、myMock.Object、EventArgs.Empty);'。 'x => x.SomethingHappened + = null'、これはMockに通知します。どのイベントが発生するのでしょうか、残りは期待通りの引数です –

答えて

0

のあなたのMOQオブジェクトでありますEventHandler<TEventArgs>デリゲートの定義が変更され、4.54.0のリンクを確認すると、EventArgsから割り当てられないタイプのIFooが使用されていますが、まだコンパイラーは4.0と同じように他の側面は、Moqフレームワークがイベントパターではなく標準デリゲートとしてイベントを考慮する必要がある、ERNと呼ばれるように:起動するために、残りはobject sender, EventArgs e

+0

あなたの細かい説明のために大変ありがとう:-)。はい、私は.Net 4.5を使用しています。 –

+0

ようこそ、あなたは正しいと完全な答えを受け入れるように注意しなければなりません。 –

0

あなたは、加入者が送信者を知っていると思われる、以下のようにSomethingHappened用(オブジェクト送信者、EventArgsのeを)渡すことができますがIFoo

あなたが .Net 4.5を使用している、そこだと仮定すると
myMock.Raise(x=>x.SomethingHappened += null,myMock.Object, EventArgs.Empty); 
+0

ねえ、うまくいきます - ありがとう、男!私はnullで混乱していたようだ。私はnullが送信者パラメータとして転送されたと仮定しましたが、明らかにそうではありません。しかし、ヌルはどういう意味ですか?なぜそれが必要ですか? –

+0

あなたは最初にその理由を理解する必要があります。なぜこれが起こっているのか、あなたが気づいた場合は、そのコメントにコメントをコメントしました。私の答えをチェックし、あなたが持っている可能性がある疑いを尋ねてください –

関連する問題