unit-testing - 单元测试 Lambda 表达式
问题描述
我有一个如下所示的方法,它又调用了多个私有方法,我不会在这里发布。
@Bean
public CommandLineRunner registerStartersAndReaders(final Vertx vertx, final SpringVerticleFactory springVerticleFactory,
final SpringUtil springUtil, final GslConfig gslConfig) {
return args -> {
// Scan all the beans annotated with the @ElasticsearchBatchDataListener annotation.
List<Pair<Object, Method>> listenerMethods = springUtil.getListenerMethods();
// Deploy the starters per listener.
deployVerticle(listenerMethods, jsonConfig -> deployStarterVerticle(vertx, springVerticleFactory, jsonConfig), config);
// Deploy the reader verticles.
deployVerticle(listenerMethods, jsonConfig -> deployReaderVerticle(vertx, springVerticleFactory, jsonConfig), config);
setupTriggers(vertx, listenerMethods, config);
};
}
然后我有一个测试方法:
@Test
public void registerStartersAndReadersTest() {
when(springUtil.getListenerMethods()).thenReturn(value);
CommandLineRunner runner = config.registerStartersAndReaders(vertx, springVerticleFactory, springUtil, config);
assertNotNull(runner);
}
这里,所有传入方法调用的参数都是 mocks。问题是,当我运行这个测试时,它通过了,但它返回了值而没有进入私有方法,因为它只返回“args”。
有人可以指导我如何让我的测试涵盖所有可能的代码。我不应该更改我的测试代码。
解决方案
我认为您对 lamba 表达感到困惑,相信我一开始就很困惑。但是一旦你熟练掌握它,它就会变得轻而易举。
所以在这里你得到了CommandLineRunner
from 方法registerStartersAndReaders
调用的实例,而你的 assertNotNullPASS
因为你有非空实例,但是直到你调用没有任何run
方法的方法FunctionalInterface
才会被执行。
添加runner.run(args)
以执行测试用例中的方法。
推荐阅读
- javascript - d3js:如何将圆放在弧的末端
- javascript - 为什么我得到“密码错误”的响应,即使它是正确的?
- css - 如何将选择按钮放置在节目安排扩展面板的右侧?
- java - Android Studio 无法在 Fragment 类和线程之间传递 TextView 对象
- firebase - Nuxt js中使用Firebase生成动态路由失败
- javascript - JavaScript 导入
- python - python如何返回内置函数
- angular - Angular - 参数未附加到 HttpParams
- python - spotipy spotify python api 获取艺术家的所有版本
- json - Python3 Json位置数据提取