public class TestClass
{
public TestClass(ITestMock mock)
{
mock.SomeEvent += (sender, e) => { //do something };
}
}
public class TestMock : ITestMock
{
public event EventHnadler SomeEvent;
}
var testMock = new Mock<ITestMock>();
var testClass = new TestClass(testMock);
this.testMock.Raise(x => x.SomeEvent += null, args);
購読しているイベントによって、TestClassのプロパティが変化する場合などに、意図的にMockのイベントを発火させたい時がままあります。
そういう場合はMock.Raiseでイベントを発火できます。
x => x.SomeEvent こう書いたらダメなのに
x => x.SomeEvent += null こう書いたらOKなのは違和感ありますが仕方ないです。
上記の例では直接イベントを発火させていますが、通常はあるメソッドのコールバックで呼ばれると思います。なのでその場合は、
testMock.Setup(x => x.someMethod())
.Callback(() => testMock.Raise(x => x.SomeEvent += null, args))
のように設定します。
コメント