我们有一堆监听来自服务器的事件然后响应它们的类。例如:
class EventManager {
private Set<Event> cache = new HashSet<Event>();
private EventListener eventListener = new EventListener() {
void onEvent(Event e) {
if (e instanceof MyEvent || e instanceof YourEvent) {
handleEvent(e);
}
}
}
public EventManager(ServerCommunication serverComm) {
serverComm.addListener(eventListener);
}
private handleEvent(Event e) {
// handle the event...
// ...
cache.add(cache);
// ...
}
}
这是我们正在做的事情的虚构示例。以下是我看到的问题:
- 我想测试 handleEvent 以确保它正在做它应该做的事情,但我不能,因为它是私有(private)的。
- 我还想检查缓存中是否也添加了某些内容,但这似乎也很困难,因为缓存是私有(private)成员,我不想添加不必要的 getter 方法。
- 我还想测试匿名类的 onEvent 方法中的代码。
现在,我所做的是将所有逻辑从匿名类移至 handleEvent 方法,并将 handleEvent 包设为私有(private)(我的单元测试在同一个包中)。我没有检查缓存的内容,尽管我想这样做。
有没有人对更易测试的更好设计有任何建议?
最佳答案
我可能会提取一个 EventCache 组件。您可以使用计算缓存事件或记录任何感兴趣内容的实现来替换您的测试。
我可能不会更改 handleEvent 的可见性。您可以实现仅从测试用例中引发事件的 ServerCommunication。
关于java - 如何测试调用私有(private)方法的匿名内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3262759/