컨트롤러에 대한 단위 테스트를하고 비즈니스 구성 요소를 조롱하고 있습니다. 브리티시 컬럼비아에는 컨트롤러가 구성되었을 때 청취자가 듣는 공개 이벤트가 있습니다.조롱 된 객체의 이벤트를 수신하려면 어떻게해야합니까?
내가 겪고있는 문제는 다음과 같은 예상 오류가 계속 발생한다는 것입니다. "IBC.add_MessageRaised (MessageEventHandler) Expected # : 1 Actual # : 0".
그러나 내 테스트에는 그런 종류의 기대가 없습니다. 컨트롤러가 조롱 된 객체 (이 경우에는 BC)에서 이벤트를 수신하도록 설정하는 것과 관련이 있는지 궁금합니다. Controller에게 모의에서 오는 이벤트를 청취 할 수있는 또 다른 방법이 있습니까?
MessageRaised 이벤트를 발생시키는 모의 방법을 생각하려고합니다. 그러나 그것은 또 다른 질문 일 수 있습니다. 여기
코드입니다 :비즈니스 구성 요소 인터페이스
public interface IBC
{
event MessageEventHandler MessageRaised;
XmlDocument GetContentXml(string path);
}
컨트롤러
private readonly IBC _bc;
public Controller(IBC bc)
{
_bc = bc;
_bc.MessageRaised += MessageWatch;
}
private void MessageWatch(object sender, MessageEventArgs e)
{
if (MessageRaised != null)
MessageRaised(sender, e);
}
그것은 다음과 같은 코드가 mock 객체를 사용하는 것 같다
MockRepository Mockery = new MockRepository();
TFactory _tFac;
IView _view;
Presenter _presenter = new Presenter();
IBC _bc = Mockery.DynamicMock<IBC>();
Controller _controller = new Controller(_bc);
_tFac = new TFactory(Mockery);
_tFac.Create(ref _view, ref _presenter, ref _controller);
[Test]
public void View_OnGetContentXmlButtonClick_Should_SetXmlInView()
{
//SETUP
XmlDocument xmlDocument = new XmlDocument();
using (Mockery.Record())
{
SetupResult.For(_view.FilePath).Return("C:\Test.txt");
Expect.Call(_bc.GetContentXml("C:\Test.txt")).Return(xmlDocument);
_view.Xml = xmlDocument.InnerXml;
}
//EXECUTE
using (Mockery.Playback())
{
_presenter.View_OnGetContentXmlButtonClick();
}
}
고맙습니다!다른 질문은 BackToRecord() 메소드에 대해 알지 못해서 도움이되었습니다. –