Макет частично класс со скаламом
Я пытаюсь проверить класс Cls
с двумя функциями: A
а также B
, A
загружает DataFrame
а также B
звонки A
затем выполняет некоторые операции и возвращает новый DataFrame
, Для примера:
class Cls {
def A(dummy: Int): Int = 5
def B(): Int = A(7) + 1
}
С Scalamock
как можно написать мой тестовый код?
Я старался:
test("test case") {
val f = stub[Cls]
f.A _ when 7 returns 5
assert(f.B() == 6)
}
Я ожидаю, что тест успешно пройден, и я получаю 0 did not equal 6 (mytestcase.scala:24)
(Я понимаю, что этот метод заменяет все существующие функции на mock, но это не совсем то поведение)
Изменить: я нашел этот ответ, который ссылается на эту концепцию в mockito, но я не уверен, поддерживает ли scalamock этот вид насмешки и почему он не рекомендуется.
1 ответ
Решение
ScalaMock не переопределяет / заглушает финальные методы. Таким образом, вы могли бы создать подкласс с частями метода, помеченными как final:
import org.scalamock.scalatest.MockFactory
import org.scalatest.FunSuite
class PartialMockingTest extends FunSuite with MockFactory {
test("test case") {
class PartFinalCls extends Cls {
override final def B(): Int = super.B()
}
val f = stub[PartFinalCls]
f.A _ when 7 returns 5
assert(f.B() == 6)
}
}
class Cls {
def A(dummy: Int): Int = 5
def B(): Int = A(7) + 1
}