У меня есть проблема, подобная упомянутой в ссылке: Как смоделировать функцию в объекте Scala с помощью Mockito?
У меня есть объект FooInner
с методом stringData
, которыйпринимает int и выдает строковый вывод
object FooInner {
def stringData(data: Int): String = {
data match {
case 1 => "one"
case _ => "else"
}
}
}
Другой объект, FooOuter
, вызывает FooInner
для получения строковых данных и выполнения каких-либо операций с ними.
object FooOuter {
def dummyCall(data: Int): String = {
FooInner.stringData(data) + "some operation"
}
}
Моя цель состоит в том, чтобыметод теста FooOuter.dummyCall
для строковых данных, НЕ возвращаемый FooInner.stringData
Для того же, я следовал вышеупомянутому посту и создал черту
trait TFooInner {
def stringData(data: Int): String
}
Изменил подпись FooInner на
object FooInner extends TFooInner {..}
И создал тестовый класс FooTests
class FooTests extends FlatSpec with Matchers with MockitoSugar{
"dummyCall" should "mocked data" in {
val service = mock[TFooInner]
when(service.stringData(1)).thenReturn("1") // mocked service data -> 1
assert(FooOuter.dummyCall(1) === "1-some operation") // TestFailedException: "[one]-some operation" did not equal "[1]-some operation"
}
}
, но я до сих пор не могу получить поддельные служебные данные «1».У меня есть следующие вопросы:
- Как я могу сделать FooOuter тестируемым с данными, не возвращенными из FooInner
- Это правильный функциональный стиль для кода в Scala?Я чувствую, что FooOuter теперь тесно связан / зависит от FooInner
Scala: 2.11
Mockito: 1.9.5