【发布时间】:2019-12-12 20:25:22
【问题描述】:
我想对由依赖项引发的事件是否被被测类订阅的事件进行单元测试。 为了设置上下文,我有以下接口和类。
ITestedService.cs
public interface ITestedService
{
Task Start();
Task Stop();
}
IDependency.cs
public interface IDependency
{
event EventHandler<SoAndSoEventArgs> SomethingHappened;
Task Start();
Task Stop();
}
ISSecondDependency
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)。
【问题讨论】:
-
AFAICT 您需要引发
SomethingHappened实例的SomethingHappened事件。可能this 有帮助吗?它展示了如何使用m_dependencyMock.Raise。 -
那么,我
m_dependencyMock.Raise(是该行为的一部分,然后 ryt? @ZevSpitz -
是的,我想是的。 (免责声明:我在起订量方面没有经验,或者在一般的嘲笑方面。)
-
我宁愿把问题的单元测试部分变成答案。
标签: c# .net events xunit xunit.net