From: Michael W. <mic...@gm...> - 2006-07-19 19:13:13
|
I figure out my question regarding EventAdd. There were at least two potential solutions to the code I posted before. I thought I'd post it for others who might have trouble. The simplest was to create a DummyMatcher that always returned true. Here is the code for that: public interface I { event EventHandler MyEvent; } public class C : I { public event System.EventHandler MyEvent; } public class Consumer { public void DoStuff(I i) { i.MyEvent += new EventHandler(i_MyEvent); } public void i_MyEvent(object sender, EventArgs a) { } } [TestFixture] public class TestClass { [Test] public void TestOne() { Mockery m = new Mockery(); I i = (I) m.NewMock(typeof(I)); Consumer c = new Consumer(); Expect.Once.On(i).EventAdd("MyEvent", new MyMatcher()); c.DoStuff(i); m.VerifyAllExpectationsHaveBeenMet(); } public void evhandler(object sender, EventArgs a) { } } public class MyMatcher : Matcher { public override bool Matches(object o) { return true; } public override void DescribeTo(System.IO.TextWriter writer) { } } The other solution was to pass in an EventHandler that wrapped the exact same method that would be used in the code. That looked like: Expect.Once.On(i).EventAdd("MyEvent", new EventHandler(c.i_MyEvent)); For my purposes the first was sufficient. The second wouldn't work if the method was not public. I guess you'd have to use reflection. Thanks, Michael Welch |