所有,这里有一个问题,我的搜索几乎没有什么洞察力。我认为这对于我们开发大数据框架的所有人来说都是一个相当常见的问题,但同时也寻求100%的测试覆盖率。因此,我将在这里张贴这个问题,试图收集最好的社区反应&想法。
考虑一下我们需要模拟一个类来实例化外部API对象的场景。
class SolrClientWrapper {
def doWork() = {
val cli = new CloudSolrClient("zkHost1")
???
}
}为了获得100%的测试覆盖率,并且不需要在单元测试期间始终依赖Solr服务器,我们将有一种方法来拦截对new CloudSolrClient的调用。据我所知,唯一可用的库是PowerMock
这里是Twist PowerMock和其他Mock库需要asm作为依赖项,但是复杂的框架火花项目也需要asm。有版本冲突,因此(测试-)运行时地狱。
在这种情况下,最佳的设计重构/库是什么?
发布于 2016-08-14 15:59:35
与其在CloudSolrClient类中创建新的SolrClientWrapper对象,不如将其作为依赖项传递。然后,在您的测试中,您可以传递一个模拟,而不是真正的对象。请注意,有许多依赖注入框架和机制可以使您更容易地管理依赖项(例如,自动实例化它们并传递给构造函数)。
不确定asm是什么,但是一旦删除了类体中实例化内容的部分代码(因此需要“拦截”任何内容),您发布的代码应该很容易测试,而没有这种依赖关系。
https://stackoverflow.com/questions/38942801
复制相似问题