【发布时间】:2009-07-27 20:40:51
【问题描述】:
我正在为控制器做一些单元测试,并且正在模拟业务组件。 BC 有一个公共事件,我让控制器在构造控制器时监听该事件。
我遇到的问题是我不断收到期望错误,说明: “IBC.add_MessageRaised(MessageEventHandler) 预期#:1 实际#:0”。
但是,我对我的测试没有任何期望。我想知道它是否与将控制器设置为监听模拟对象(本例中的 BC)上的事件有关。有没有另一种方法可以让控制器监听来自模拟的事件?
我也在想办法让 mock 引发 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();
}
}
【问题讨论】:
标签: c# unit-testing rhino-mocks