C# 当模拟不可能时,如何单元测试类的事件是否已订阅
当模拟不可能时,是否可以通过单元测试检查事件是否已订阅 我有下面的类“InteractiveEventManager”,它接受一个名为DrawingArea的类。该类实现了IEventManager,它有两个方法-Subscribe()和UnSubscribe() Subscribe方法从DrawingArea类订阅自定义事件 现在我不知道如何检查Subscribe方法是否订阅了这些事件C# 当模拟不可能时,如何单元测试类的事件是否已订阅,c#,C#,当模拟不可能时,是否可以通过单元测试检查事件是否已订阅 我有下面的类“InteractiveEventManager”,它接受一个名为DrawingArea的类。该类实现了IEventManager,它有两个方法-Subscribe()和UnSubscribe() Subscribe方法从DrawingArea类订阅自定义事件 现在我不知道如何检查Subscribe方法是否订阅了这些事件 internal interface IEventManager { void Subscribe(
internal interface IEventManager
{
void Subscribe();
void UnSubscribe();
}
public class InteractiveEventManager: IEventManager
{
private readonly DrawingArea _drawingArea;
public InteractiveEventManager(DrawingArea drawingArea)
{
_drawingArea = drawingArea;
}
public void Subscribe()
{
_drawingArea.MouseMove += DrawingAreaMouseMove;
_drawingArea.PreviewMouseDown += DrawingAreaPreviewMouseDown;
}
private void DrawingAreaPreviewMouseDown(object sender, MouseButtonEventArgs e)
{
_drawingArea.Chart.InteractiveCurvesArea.ProcessMouseDown(
e.GetPosition(_drawingArea));
}
private void DrawingAreaMouseMove(object sender, MouseEventArgs e)
{
_drawingArea.Chart.InteractiveCurvesArea.ProcessMouseMove(
e.GetPosition(_drawingArea));
}
}
我写了以下测试,但它不工作。因为DrawingArea是一个类(不是接口),所以我认为我们不能调用AssertWasCalled。你能帮忙吗
[Test]
public void When_register_then_drawing_area_mouse_move_is_registered()
{
DrawingArea drawingArea = new DrawingArea();
InteractiveEventManager interactiveEventManager =
new InteractiveEventManager(drawingArea);
interactiveEventManager.Subscribe();
drawingArea.AssertWasCalled(x => x.MouseMove +=
Arg<MouseEventHandler>.Is.Anything);
}
[测试]
注册时公共无效,然后绘图区域鼠标移动已注册()
{
DrawingArea DrawingArea=新DrawingArea();
InteractiveEventManager InteractiveEventManager=
新的InteractiveEventManager(drawingArea);
interactiveEventManager.Subscribe();
调用drawingArea.AssertWas(x=>x.MouseMove+=
Arg.Is.Anything);
}
谢谢。我首先要尝试在接口后面抽象DrawingArea类。否则,这不是真正的单元测试,而是集成测试。对于单元测试,使用反射是完全合法的,因此,如果
DrawingArea
超出您的控制,您可以使用这种技术:我将首先尝试在接口后面抽象DrawingArea类。否则,这不是真正的单元测试,而是集成测试。对于单元测试,使用反射是完全合法的,因此如果DrawingArea
超出您的控制范围,您可以使用以下技术: