首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala/Spark中的静态方法及构造函数拦截仿真

Scala/Spark中的静态方法及构造函数拦截仿真
EN

Stack Overflow用户
提问于 2016-08-14 13:40:17
回答 1查看 362关注 0票数 2

所有,这里有一个问题,我的搜索几乎没有什么洞察力。我认为这对于我们开发大数据框架的所有人来说都是一个相当常见的问题,但同时也寻求100%的测试覆盖率。因此,我将在这里张贴这个问题,试图收集最好的社区反应&想法。

考虑一下我们需要模拟一个类来实例化外部API对象的场景。

代码语言:javascript
复制
class SolrClientWrapper {
   def doWork() = {
       val cli = new CloudSolrClient("zkHost1")
       ???
   }
}

为了获得100%的测试覆盖率,并且不需要在单元测试期间始终依赖Solr服务器,我们将有一种方法来拦截对new CloudSolrClient的调用。据我所知,唯一可用的库是PowerMock

这里是Twist PowerMock和其他Mock库需要asm作为依赖项,但是复杂的框架火花项目也需要asm。有版本冲突,因此(测试-)运行时地狱。

在这种情况下,最佳的设计重构/库是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-14 15:59:35

与其在CloudSolrClient类中创建新的SolrClientWrapper对象,不如将其作为依赖项传递。然后,在您的测试中,您可以传递一个模拟,而不是真正的对象。请注意,有许多依赖注入框架和机制可以使您更容易地管理依赖项(例如,自动实例化它们并传递给构造函数)。

不确定asm是什么,但是一旦删除了类体中实例化内容的部分代码(因此需要“拦截”任何内容),您发布的代码应该很容易测试,而没有这种依赖关系。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38942801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档