Я провожу несколько тестов, и во многих случаях у меня есть конфигурация FTP / HTTP.
Я работаю со Scala и следующими библиотеками в моем sbt:
"org.scalatest" %% "scalatest" % "3.0.1" % Test,
"org.scalamock" %% "scalamock" % "4.1.0" % Test,
Я делаю следующий код в качестве примера смоделированной конфигурации внутри моего теста:
val someConfig = SomeConfig(
endpoint = "",
user = "",
password = "",
companyName = "",
proxy = ProxyConfig("", 2323)
)
Но я чувствую, что делать это для каждой конфигурации, с которой я собираюсь иметь дело, нехорошо ...
Я хотел бы создать следующее:
val someConfig = mock[SomeConfig]
но когда мой код пытается достичь свойства прокси, которое является классом case, он терпит неудачу с исключением нулевого указателя.
Я хотел бы знать, как имитировать классы кейсов, которые содержат другие классы кейсов, и сделать мой код более понятным, есть ли способ сделать это с помощью MockFactory?





Вы можете попробовать поиздеваться над этим так:
val someConfig = mock[SomeConfig]
when(someConfig.proxy).thenReturn(ProxyConfig("", 2323))
Таким образом, он вернет ProxyConfig("", 2323), когда вы попытаетесь получить someConfig.proxy.
В приведенном выше коде используется Mockito из-за известное ограничение ScalaMock
Приведенный выше синтаксис взят из Mockito.
Параметры классов case транслируются в поля val, а в ScalaMock есть известное ограничение, где он не может имитировать val, поэтому я думаю, что это невозможно сделать напрямую с помощью ScalaMock.
У Mockito есть такая возможность.
не могли бы вы предоставить свою конфигурацию sbt / или любого другого, чтобы знать, какие пакеты мне следует использовать для этого синтаксиса ?, а также какие расширения, которые вы используете в конкретном тестовом примере, были бы отличными. Я вижу, что это работает только для получателей определенного частного свойства, но не для общедоступных свойств класса case, вложенного с другим классом case ... может быть что-то вроде scala faker, может быть решением, но я ожидал, что это будет решено макетом фабрика....