tgoop.com/scala_verticals/41
Create:
Last Update:
Last Update:
Обновление scalamock с 5.2.0 до 6.0.0
Привет! Это Женя Веретенников, я отвечаю за devtools для скалистов. Мы недавно обновили scalamock в нашем монорепозитории и сделали шажок к Scala 3 :)
Для тех, кто ещё не обновлялся — рассказываем про важный нюанс обновления.
В новой версии инстанс MockFactory
обязан быть инстансом TestSuite
. То есть нужно подмешивать MockFactory
в класс теста, а не куда-либо ещё.
Например, такая конструкция больше не компилируется:
trait Mocking extends MockFactory {
val myMock = mock[MyService]
}
class MyServiceSpec extends AnyWordSpec {
"MyService" should {
"do something" in new Mocking { /* ... */ }
}
}
Эту конструкцию использовали, чтобы создавать отдельные моки под каждый тест.
Изменение API сделано не просто так. Чтобы scalamock проверял в конце теста, вызваны ли моки, как ожидалось, нужно подмешивать MockFactory именно в класс теста. Например, этот тест не падает, несмотря на очевидное отсутствие вызова
f(42)
:
class NoMockFactorySpec extends AnyWordSpecLike {
trait Service {
def f(x: Int): String
}
"blabla" should {
"blabla" in new MockFactory {
val service = mock[Service]
(service.f _).expects(42).returning("42")
}
}
}
На версии scalamock 6.0.0 этот код не компилируется.
Корректно создать по моку на каждый тест можно с помощью
OneInstancePerTest
. Избавляться от fixture-трейтов типа Mocking
, как в первом примере, необязательно. Достаточно завернуть его внутрь класса с тестом:
class MyServiceSpec extends AnyWordSpec with MockFactory with OneInstancePerTest {
trait Mocking {
val myMock = mock[MyService]
}
"MyService" should {
"do something" in new Mocking { /* ... */ }
}
}
В процессе обновления библиотеки мы заметили, что несколько тестов из-за этой проблемы уже давно были зелёными, но по факту сломанными, так как неверно проверяли моки. Часть тестов удалось пофиксить, на часть пришлось навесить
@Ignore
Возможно, такие сломанные тесты найдутся при обновлении и у вас.
@scala_verticals
BY Scala-сообщество Вертикалей

Share with your friend now:
tgoop.com/scala_verticals/41