Кажется, что то, что вы ищете, это способ высмеивать service1.getValue1()
в вашем Controller1
.
Scalatest поддерживает несколько различных способов сделать это: http://www.scalatest.org/user_guide/testing_with_mock_objects
В вашем случае, чтобы проверить def getSomeValue()
; вам нужно определить макет и установить правильные ожидания, чтобы при вызове из теста макет возвращал ожидаемые ответы.
Если вы хотите использовать scala mock, вам потребуется чтобы добавить его в качестве зависимости в вашей конфигурации сборки sbt. Вы можете сделать это, добавив эту зависимость в свои тесты:
"org.scalamock" %% "scalamock" % "4.4.0" % Test
И тогда ваш тест может выглядеть примерно так:
import org.scalamock.scalatest.MockFactory
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
class Controller1Spec extends AnyFlatSpec with Matchers with MockFactory {
"Controller1" should "respond with a valid response" in {
val mockService = mock[ServiceClass1]
(mockService.getValue1 _).when().returning("Some Response").once()
val mockAuthAction = mock[AuthAction] //assuming you've got an action called AuthAction
//you'd need to mock this one too, in order for it to work
(mockAuthAction.invokeBlock _) expects(_) onCall((r,b) => b(r))
new Controller1(mockService, mockAuthAction) shouldBe Ok("Some Response")
}
}
Есть ряд сообщений о насмешках для Scala, который вы сможете найти, например, здесь: https://scalamock.org/user-guide/advanced_topics/