带有对象的单元测试特征

elm*_*lto 1 unit-testing scala playframework-2.0

我有以下构造,在那里我有一个

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
}
Run Code Online (Sandbox Code Playgroud)

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

这一切都是在 Play Framework 2.3 周围完成的,该应用程序也能正常工作,但是当我在测试中将其作为隐式使用时,我收到以下错误:

java.lang.NoClassDefFoundError: Could not initialize class DataComponentLocalImpl

测试套件:

class AutoCompleteSpec extends PlaySpec with Mockito with OneAppPerSuite {
  val resource = new DataServiceLocalImpl {}
  implicit val dataService = resource.dataService
}
Run Code Online (Sandbox Code Playgroud)

如果我删除隐式它会起作用......

Oli*_*haw 5

您应该创建一个覆盖服务的对象。

  object FakeImpl extends DataServiceLocalImpl {
    override dataService = //Fake or test data service here
  }
Run Code Online (Sandbox Code Playgroud)

然后创建一个匿名类定义,允许您测试特征。