Скажем, у меня есть следующее:
@ImplementedBy(classOf[DefaultFoo])
trait Foo {
def a (s : String) : Int
}
class DefaultFoo @Inject()() extends Foo{
override def a (s : String) = 1
}
@ImplementedBy(classOf[DefaultBaz])
trait Baz {
def b (s : String) : Int
}
class DefaultBaz @Inject()(val f :Foo) extends Baz{
override def a (s : String) = 1
}
Если я хочу протестировать, скажем, DefaultBaz, я обычно использую ScalaMock, и в своей тестовой спецификации я бы издевался следующим образом:
class DefaultBazSpec extends AnyWordSpec with MockFactory{
val mockFoo = mock[Foo]
val b = new DefaultBaz(mockFoo)
// write tests
}
Но я также мог бы сделать это:
val mockFoo = mock[DefaultFoo]
Какой лучше? Издеваться над чертой или реализацией класса по умолчанию?
Foo
внедряется в другой класс. И тесты для этого класса будут использовать фиктивную версиюFoo
с использованием Scalamock. Теперь я мог бы сделатьmock[Foo]
илиmock[DefaultFoo]
. хотел узнать плюсы и минусы - person Mojo   schedule 25.01.2021DefaultBaz
расширялBaz
и получал экземплярFoo
в качестве аргумента. - в любом случае, я знаю, что вы привыкли к java-способу работы с отражением для решения (усложнения) каждой тривиальной проблемы, такой как передача зависимостей и тестирование. Но многие люди в Scala предпочитают все упрощать и просто передавать зависимости вручную и использовать простые заглушки для тестирования вместо макетов. - person Luis Miguel Mejía Suárez   schedule 25.01.2021Foo
, и предоставить там ложную реализацию, которую вы бы сделали с фиктивным, и передать экземпляр этого класса вDefaultBaz
для проверки ti. Но если вы предпочитаете продолжать использовать насмешки по какой-либо причине (согласованность с остальной кодовой базой является веской причиной), я думаю, вам следует имитироватьFoo
- person Luis Miguel Mejía Suárez   schedule 25.01.2021DefaultBaz
должен работать для любогоFoo
, а также потому, что имитироватьDefaultFoo
может быть сложнее, чем простой интерфейс (который, кстати, не нуждается в имитировании, но вы, должно быть, устали от того, что я повторяю это снова и снова) я>. - person Luis Miguel Mejía Suárez   schedule 25.01.2021a
. Так что вместо этого я издеваюсь надFoo
, и мне не нужно во всё это вмешиваться. - person Mojo   schedule 25.01.2021