Макет частично класс со скаламом - PullRequest
3 голосов
/ 19 апреля 2019

Я пытаюсь протестировать класс 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) (я понимаю, что этот метод scamamock заменил все существующие функции на mock, однако это не является обязательным поведением)

Edit: Я нашел этот ответ , который ссылается на эту концепцию в mockito, но я не уверен, поддерживает ли scalamock этот вид насмешки и почему он не рекомендуется.

1 Ответ

3 голосов
/ 19 апреля 2019

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
}
...