微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Junit 测试或模拟调用 ThreadPoolExecutor 的提交方法,传递 lambda 表达式

如何解决Junit 测试或模拟调用 ThreadPoolExecutor 的提交方法,传递 lambda 表达式

我有一个声明如下所示,我需要测试/验证调用

snmpdispatchDelegateExecutor.submit(() -> processRunFunctionException(exception));

现在它同时包含很多东西(异步调用、lambda 和私有方法合二为一),所以我有一些问题: 1:用于处理返回未来任务的 submit() 调用。 我必须做类似的事情吗

when(snmpdispatchDelegateExecutorMock.submit(any()/Runnable)).thenReturn(any()/FutureTask). 

那么问题是如何实现(创建Runnable和Future)。尝试创建两个看起来都很复杂。

2: processRunFunctionException(exception) 是一个私有方法,我们需要覆盖它吗,很多“SO”帖子都说不需要覆盖私有方法。一般来说,如果我专注于覆盖公共方法,私有方法也应该被覆盖。引用this

3:如何在此处使用 lambda 表达式。经历了 link 但没有太大帮助。

解决方法

模拟您不拥有的类通常是有问题的,因为您在测试中硬编码了可能与实际行为不匹配的行为。

我建议使用真正的 ExecutorService 实现。例如,您可以使用在当前线程中完成其工作的实现(请参阅 Is there an ExecutorService that uses the current thread?)或仅在您告诉它时才完成工作的实现。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。