gpt4 book ai didi

java - Junit 事件驱动测试

转载 作者:行者123 更新时间:2023-11-30 07:54:07 26 4
gpt4 key购买 nike

这是我第一次进行测试(是的,我以前从未运行过测试,但开始永远不会晚,不是吗?)

我有一个解析缓冲区并分派(dispatch)事件的解析器)。

调用解析器:

parser.parse((ByteBuffer) readBuffer.duplicate().flip(), key);

解析方法:

@Override
public void parse(final ByteBuffer buffer, final SelectionKey key) {
//Parse some stuff here and then dispatch a new event

eventDispatcher.dispatch(new ConnectionDataReadyArgs(key, host.toString(), port));
}

事件处理器:

@Override
public void handle(final ConnectionDataReadyArgs args) {
//Do stuff here with the recieved args
}

如何创建一个 junit 测试来检查事件处理程序接收到的参数是否正确?

提前致谢。

最佳答案

在编写代码后编写测试的一个问题是,您可能没有为可测试性设计代码。

依赖注入(inject) 使代码更易于测试。如果幸运的话,您已经注入(inject)了 eventDispatcher。如果没有,将 eventDispatcher 设为构造函数参数将有助于实现这一点:

  public MyClass(EventDispatcher eventDispatcher) {
this.eventDispatcher = eventDispatcher;
}

(您也可以使用 setter——但我更喜欢让我的对象不可变)

完成后,您可以注入(inject)测试 EventDispatcher:

  class TestEventDispatcher implements EventDispatcher {
public Event event;
public EventDispatchChain tail;

public Event dispatchEvent(Event event, EventDispatchChain tail) {
this.event = event;
this.tail = tail;
return null;
}
}

TestEventDispatcher testDispatcher = new TestEventDispatcher();
MyClass testObject = new MyClass(testDispatcher);
testObject.dosomething();
assertThat(testDispatcher.event, someMatcher(...));

模拟框架(例如 Mockito 或 JMock)为此提供了一种动态且流畅的方式来创建模拟对象。它在很多方面都比我在此处所做的创建临时静态测试实现要好。阅读其中任何一个的介绍性文档。

这用于单元测试。您可能还需要一些集成测试,这些测试使用真实的 EventDispatcher 以及您自己的几个对象,检查当对象 A 中发生某些事情时,eventDispatcher 触发并且某些事情发生在对象 B.

关于java - Junit 事件驱动测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44289377/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com