Ich mache einige Komponententests für einen Controller, und ich verspotte die Business-Komponente. Das BC hat ein öffentliches Ereignis, auf das der Controller hört, wenn der Controller aufgebaut wird.Wie höre ich das Ereignis eines verspotteten Objekts?
Das Problem, das ich habe, ist, dass ich einen Erwartungsfehler bekomme, der besagt: "IBC.add_MessageRaised (MessageEventHandler) Erwartet #: 1 Actual #: 0".
Allerdings habe ich in meinem Test keine solche Erwartung. Ich frage mich, ob es damit zu tun hat, den Controller so einzustellen, dass er auf ein Ereignis auf einem verspotteten Objekt hört (in diesem Fall das BC). Gibt es einen anderen Weg, wie ich den Controller dazu bringen kann, ein Ereignis zu hören, das von einem Mock kommt?
Ich versuche auch über eine Möglichkeit nachzudenken, wie der Mock das MessageRaised-Ereignis auslösen kann, aber das könnte eine andere Frage sein. Hier
ist der Code:
Business Component-Schnittstelle
public interface IBC
{
event MessageEventHandler MessageRaised;
XmlDocument GetContentXml(string path);
}
-Controller
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);
}
Einheit Test
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();
}
}
Vielen Dank!Die andere Frage half mir, da ich die BackToRecord() Methode nicht kannte. –