我正在做一些控制器的單元測試,我正在嘲笑業務組件。 BC有一個公共事件,當控制器構建時,我讓控制器收聽。如何聆聽嘲笑對象的事件?
我遇到的問題是我不斷收到一個期望錯誤消息: 「IBC.add_MessageRaised(MessageEventHandler)Expected#:1 Actual#:0」。
但是,在我的測試中我沒有這種期望。我想知道是否需要將控制器設置爲偵聽模擬對象(本例中爲BC)上的事件。有沒有另外一種方法讓控制器能夠聽到來自模擬的事件?
我也試圖想辦法讓模擬器引發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);
}
單元測試
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()方法。 – 2009-07-28 16:22:42