2016-10-10 2 views
0

이 interace 고려 어떻게 널이 아닌 송신자와 이벤트를 발생하는 방법 : MOQ와MOQ는 :

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

당신이 어떤 에러가 발생합니까 형태로 표준 인수 될 MOQ 프레임 워크, 이벤트/대리자를 말할

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

당신이 .Net 4.5을 사용하고 있다고 가정의 당신의 MOQ 개체입니다 알려 것이다, 아래 SomethingHappened 위해 (EventArgs입니다 전자 개체를 보낸 사람)을 통과 할 수있다 EventHandler<TEventArgs> 대리자의 정의를 변경하고 4.54.0에 대한 링크를 확인하면 EventArgs에서 할당 할 수없는 IFoo 유형을 사용하지만 여전히 컴파일러는 4.0에서와 같이 불평하지 않지만 다른 측면은 Moq 프레임 워크가 이벤트를 기본 위임자로 간주하는 이벤트 패턴이 될 것입니다. 필요가있는, ERN 호출되는 등 : 호출하고 나머지는 object sender, EventArgs e

+0

잘 설명해 주셔서 감사합니다 :-). 예, .NET 4.5를 사용하고 있습니다. –

+0

환영합니다. 그렇다면 정확하고 완전한 대답을 받아 들일 것입니다. –

0

당신은 가입자가 보낸 사람이 IFoo

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

안녕하세요, 작동합니다 - 고마워요! 내가 null로 혼란스러워 보였다. null이 보낸 사람 매개 변수로 전달되었다고 가정했지만 외관상으로는 그렇지 않습니다. 그렇다면 null은 무엇을 의미합니까? 왜 그것이 필요합니까? –

+0

당신은 먼저 그 이유를 이해할 필요가 있습니다. 왜 이런 일이 일어나고 있는지 그리고 당신이 알아 차렸을 때, 나는 그 해답에 대해 많은 의견을 말했습니다. 내 대답을 확인하고 의심 할 여지가 있는지 물어보십시오 –

관련 문제