метод заглушки scalamock с определенными параметрами не работает при нулевом значении

Привет, я хочу заглушить метод с определенными параметрами и получить результат с помощью вспомогательного метода.

val myDAOMock = stub[MyDao]

  (myDAOMock.getFoos(_:String)).when("a").returns(resHelper("a"))
//btw-is there a way to treat "a" as a parameter to the stubbed method and to the return ?
  (myDAOMock.getFoos(_:String)).when("b").returns(resHelper("b"))

def resHelpr(x:String) = x match{
case "a" => Foo("a")
case "b" => Foo("b")
}

но кажется, что в моем тесте я могу захватить только один, так как 2-й тест терпит неудачу (независимо от порядка, в котором я запускаю тесты)

"A stub test" must{
"return Foo(a)" in{
myDAOMock.getFoos("a")
}
"return Foo(b)" in{
myDAOMock.getFoos("b") //this one will fail on null pointer exception 
}

как я могу улучшить свою заглушку?


person igx    schedule 30.01.2016    source источник


Ответы (2)


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

import org.scalamock.scalatest.MockFactory
import org.scalatest._

class TestSpec extends FlatSpec with Matchers with MockFactory {
  val myDAOMock = stub[MyDao]
  val aFoo      = Foo("a")
  val bFoo      = Foo("b")

  def resHelper(x: String): Foo = {
    x match {
      case "a" => aFoo
      case "b" => bFoo
    }
  }

  "A stub test" must "return the correct Foo" in {
    (myDAOMock.getFoos(_: String)) when "a" returns resHelper("a")
    (myDAOMock.getFoos(_: String)) when "b" returns resHelper("b")

    assert(myDAOMock.getFoos("a") === aFoo)
    assert(myDAOMock.getFoos("b") === bFoo)
  }
}
person Tim Graf    schedule 30.01.2016

Я думаю, что это была проблема в более старых версиях ScalaMock, и теперь она должна быть исправлена ​​в более поздних версиях, возвращая лучшее сообщение вместо NPE. NPE происходит, когда вы повторно использовали макет в двух случаях. См. http://scalamock.org/user-guide/sharing-scalatest/. как это сделать безопасно.

person Philipp    schedule 24.03.2017