我希望能对依赖项引发的事件进行单元测试,以检测被测试类是否已经订阅了该事件。
为了设置上下文,以下是接口和类。
ITestedService.cs
public interface ITestedService
{
Task Start();
Task Stop();
}
IDependency.cs
public interface IDependency
{
event EventHandler<SoAndSoEventArgs> SomethingHappened;
Task Start();
Task Stop();
}
ISecondDependency
public interface ISecondDependency
{
Task DoYourJob(SoAndSo soAndSo);
}
TestedService.cs
public class TestedService : ITestedService
{
readonly IDependency m_dependency;
readonly ISecondDependency m_secondDependency;
public TestedService(
IDependency dependency,
ISecondDependency secondDependency)
{
m_dependency = dependency;
m_secondDependency = secondDependency;
}
public async Task Start()
{
m_dependency.SomethingHappened += OnSomethingHanppened;
await m_dependency.Start();
}
private async void OnSomethingHanppened(object sender, SoAndSoEventArgs args)
{
SoAndSo soAndSo = SoAndSoMapper.MapToDTO(args);
await m_secondDependency.DoYourJob(soAndSo),
}
}
在上文的基础上,我想使用xUnit
对TestedService
类的Start()
方法进行单元测试。
- 断言事件是否已连接到处理程序。
- 模拟触发
IDependency.SomethingHappened
事件。 - 验证
OnSomethingHappened
方法是否被执行。 - 验证是否调用了
ISecondDependency.DoYourJob(soAndSo)
方法。
m_dependencyMock
实例的SomethingHappened
事件。也许这个链接有所帮助?它展示了如何使用m_dependencyMock.Raise
。 - Zev Spitzm_dependencyMock.Raise(
是 act 的一部分,对吧?@ZevSpitz - Jins Peter