全部,这是一个问题,我的搜索几乎没有深入了解。我认为这应该是我们所有人针对大数据框架开发而且寻求100%测试覆盖率的相当普遍的问题。所以我会在这里发布这个问题,试图收集最好的社区回应&想法。
考虑我们需要模拟实例化外部API对象的类
的场景class SolrClientWrapper {
def doWork() = {
val cli = new CloudSolrClient("zkHost1")
???
}
}
为了获得100%的测试覆盖率,并且在单元测试期间没有实际依赖Solr服务器,我们将有一种方法来拦截对new CloudSolrClient
的调用。据我所知,唯一可用的库是PowerMock
这是The Twist
PowerMock和其他Mock库需要asm
作为依赖项,但复杂的框架Spark项目也需要asm
。存在版本冲突,因此(测试 - )运行时地狱。
针对这种情况,最好的设计重构/库是什么?
答案 0 :(得分:1)
不应在CloudSolrClient
类中创建新的SolrClientWrapper
对象,而应将其作为依赖项传递。然后在测试中,您可以传递模拟而不是真实对象。请注意,有许多依赖注入框架和机制可以使您更容易管理依赖项(例如,自动实例化它们并为您传递给构造函数)。
不确定asm
是什么,但是一旦删除了在类体内实例化内容的部分代码(因此需要“拦截”任何东西),你发布的代码应该很容易测试而没有这种依赖性