Scala单元测试 - 剔除单例

时间:2015-05-04 21:31:30

标签: scala unit-testing mocking

我是Scala中单元测试的新手,我无法找到一种方法来存储单个对象中定义的函数。

例如:

class Profile {
  def getLatest
    ...
    Feed.getLatestEntries
    ...
}

object Feed {
  def getLatestEntries: Future[List[FeedEntry]] { /* Access some API*/ }
}

我试图对Profile类中定义的getLatest函数进行单元测试。 由于我不希望在我的单元测试中通过网络实际访问外部API,因此我尝试存根Feed对象及其getLatestEntries函数以返回一些预定义值。

我已经查看了ScalaMock,EasyMock和Mockito框架,但找不到一种方法来存根单个对象的方法。 ScalaMock陈述

为什么所有模拟框架都不提供此功能?我怎样才能做到这一点?存根Feed.getLatestEntries

谢谢

1 个答案:

答案 0 :(得分:3)

我的方法是创建单身人士的逻辑作为特征,然后让对象扩展特征。这允许我将Singleton作为默认或隐式参数提供,但为测试提供了一个存根实现

trait FeedLogic {
  def getLatestEntries: Future[List[FeedEntry]] { /* Access some API*/ }
}

object Feed extends FeedLogic

def somethingWantingFeed(...)(feed: FeeLogic = Feed) = { ??? }