Как проверить введенный класс через Spec2?
Я пытаюсь проверить класс
@Singleton
class Foo @Inject()(bar: Bar)(implicit ec: ExecutionContext) {
def doSomething = bar.doSomethingInBar
}
class Bar {
def doSomethingInBar = true
}
через Specification
класс, который упоминается ниже
class FooTest @Inject()(foo: Foo) extends Specification {
"foo" should {
"bar" in {
foo.doSomething mustEqual (true)
}
}
}
Теперь, когда я запускаю это, я получаю следующую ошибку
Can't find a constructor for class Foo
Я следовал за решением, упомянутым здесь
И определил Injector
object Inject {
lazy val injector = Guice.createInjector()
def apply[T <: AnyRef](implicit m: ClassTag[T]): T =
injector.getInstance(m.runtimeClass).asInstanceOf[T]
}
и lazy val foo: Foo = Inject[Foo]
внутри моего класса спецификации. Это решает мою проблему инициализации конструктора, но сейчас я получаю эту ошибку.
[error] ! check the calculate assets function
[error] Guice configuration errors:
[error]
[error] 1) No implementation for scala.concurrent.ExecutionContext was bound.
[error] while locating scala.concurrent.ExecutionContext
1 ответ
Решение
Вы должны предоставить неявное ExecutionEnv
заставить код работать
@RunWith(classOf[JUnitRunner])
class FooTest(implicit ee: ExecutionEnv) extends Specification {
"foo" should {
"bar" in {
foo.doSomething mustEqual (true)
}
}
}
Теперь где-то в вашем коде вам нужно инициализировать конструкцию foo, и вы можете передать ее через конструктор - что является точкой внедрения зависимости.