使用对象对单元测试特性进行测试

5
我有以下结构,其中我有一个
trait DataServiceLocalImpl extends DataService {
  override lazy val dataService = DataComponentLocalImpl
}

object DataComponentLocalImpl extends DataComponent {
  def getData(element:String):String = GetStuffFromFile(element)
}

trait DataService {
  val dataService: DataComponent
}

trait DataComponent {
  def getData(element:String):String
}

GetStuffFromFile会从磁盘上读取文件一次(我只想要一次,因此使用对象),创建一个映射,然后返回元素的值。

这全部都是在Play Framework 2.3环境中完成的,应用程序也可以正常工作。但是当我在测试中将其用作隐式时,我会收到以下错误:

java.lang.NoClassDefFoundError:无法初始化类DataComponentLocalImpl

测试套件:

class AutoCompleteSpec extends PlaySpec with Mockito with OneAppPerSuite {
  val resource = new DataServiceLocalImpl {}
  implicit val dataService = resource.dataService
}

如果我去掉默认的it,它就起作用了...
1个回答

9
你应该创建一个重写了服务的对象。
  object FakeImpl extends DataServiceLocalImpl {
    override dataService = //Fake or test data service here
  }

接着,您可以创建一个匿名类定义来测试该特质。


你可以在Scala中扩展一个对象吗? - Jwan622

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接