如果接口实现中使用的事件未出现在您正在模拟的接口中,是否有办法使用 moq 对引发事件进行单元测试?
注意:我的界面与我的 UI 没有任何关系,我的事件仅用于 UI 通知,因此我想将该行为与实际界面分离,因为存储库位于与客户端/UI 不同的库中。
例如:
[Test]
public void TestRaiseBarProcessed()
{
ManualResetEvent barProcessedEvent = new ManualResetEvent(false);
bool called = false;
//Arrange
Mock<IFooRepository> mockFooRepository = new Mock<IFooRepository>();
mockSourceRepository
.Setup(a => a.SearchForBar(barsToFind))
.Returns(barsFound)
.Raises(
a => a.BarProcessed += null,
new BarFoundEventArgs(It.IsAny<string>()));
IList<IFooRepository> mockFooRepositories =
new List<IFooRepository>();
mockFooRepositories.Add(mockFooRepository.Object);
FooBar fooBar = new FooBar(mockFooRepositories, FooList);
fooBar.CurrentBarBeingProcessedInfo += (sender, e) =>
{
barProcessedEvent.Set();
called = true;
};
//Act
fooBar.CallFooRepositoryMethod();
barProcessedEvent.WaitOne(25, false);
//Assert
mockFooRepository.Verify(
a => a.SearchForBar(barsToFind),
Times.Once());
Assert.AreEqual(true, called);
}
让我知道这是否需要更多澄清。