gpt4 book ai didi

java - 模拟具有 setListener(...) 的依赖项

转载 作者:行者123 更新时间:2023-11-28 21:29:21 24 4
gpt4 key购买 nike

我的测试类有一些依赖项。所有这些都提供 setListener() 作为从其非阻塞操作接收通知的方式。

我实现了一个阻塞方法,该方法聚合所有非阻塞操作的结果。这意味着我必须使用此类 setListener() 方法注册监听器,并等待回调。

我应该如何在我的单元测试中模拟/伪造这些依赖关系?我可以将它们子类化并实现 setListener() 并根据需要触发回调。但是假设其中一些部门是 final 类。另外,我认为 Mockito 可能有一些我可以使用的东西?

概念代码(未经测试):

public void blockingMethod() {
CountDownLatch signal = new CountDownLatch(2);

dep1.setListener(new Dep1Listener() {
@Override public onResult(int result) {
signal.countDown();
}
});
dep1.calculateValue1();

dep2.setListener(new Dep2Listener() {
@Override public onResult(int result) {
signal.countDown();
}
});
dep2.calculateValue2();

signal.await();
return combinedResult;
}

最佳答案

我会为您的依赖项创建返回固定值的具体实现。我不会对现有类进行子类化,而是创建您的接口(interface)的最小实现。如果您没有为依赖项定义接口(interface),请创建它们。

模拟可能有效,但测试会更难阅读。一旦模拟需要保留一个参数(即您的听众)并稍后对其进行处理,它就变得具有挑战性。

关于java - 模拟具有 setListener(...) 的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28776286/

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