насмешливый метод внутри другого метода скала - PullRequest
0 голосов
/ 22 января 2019

У меня возникла проблема при издевании над методом, который вызывается в другом методе.

Например: ниже в моем основном классе.

class Trial extends TrialTrait {

  def run(): String ={
    val a = createA()
    val b = a.split(" ")
    val c = b.size
    val d = c + " words are there"
    d
  }

  def createA(): String = {
    var a = "above all the things that have been done, one thing remained in silent above all the things that have been done one thing remained in silent above all the that "
    a
  }
}

Ниже приведен мой макет кода.

class TryMock4 extends FunSuite with BeforeAndAfterEach with MockFactory {

  val trial = new Trial
  val st = stub[TrialTrait]

  test("Mocking the DataFrame") {
    val input = "above all the things that have been done, one thing remained in silent above "
    (st.createA  _).when().returns(input)
    val expected = "14 words are there"
    val actual = st.run()
    Assert.assertEquals(expected,actual)
  }
}

Я пытаюсь передать ложные данные в createA и использовать их в методе run.

Но оно дает значение null после запуска метода run.

Не могли бы вы подсказать, как этого можно достичь?

1 Ответ

0 голосов
/ 24 января 2019

Я не думаю, что в этом случае вам нужен макет, достаточно просто обычного переопределения.

class TrialTest extends FlatSpec with Matchers {
  behavior of "Trial"

  it should "count words" in {
    val input = "above all the things that have been done, one thing remained in silent above "

    val trial = new Trial {
      override def createA(): String = input
    }

    val expected = "14 words are there"
    val actual = trial.run()
    actual should be (expected)
  }
}

Однако, если вы действительно хотите использовать макет здесь, это возможно с помощью scamamock.Вы можете определить наш собственный класс, который делает часть класса финальной (бит, который вы не хотите высмеивать), см. Ниже:

class TrialTestWithMock extends FlatSpec with Matchers with MockFactory {
  behavior of "Trial"

  it should "count words" in {
    val input = "above all the things that have been done, one thing remained in silent above "

    class FinalTrial extends Trial {
      final override def run(): String = super.run()
    }

    val trial = mock[FinalTrial]

    (trial.createA _).expects().returning(input).anyNumberOfTimes()
    val expected = "14 words are there"
    val actual = trial.run()
    actual should be (expected)
  }
}
...