Mockito课程被嘲笑但没有任何回报

时间:2015-10-28 09:16:33

标签: scala unit-testing

我对Scala有点新意,正如标题中所说,我正试图嘲笑一个班级。

DateServiceTest.scala

@RunWith(classOf[JUnitRunner])
class DateServiceTest extends FunSuite with MockitoSugar {
  val conf = new SparkConf().setAppName("Simple Application").setMaster("local")
  val sc = new SparkContext(conf)
  implicit val sqlc = new SQLContext(sc)  

  val m = mock[ConfigManager]
  when(m.getParameter("dates.traitement")).thenReturn("10")

  test("mocking test") {

    val instance = new DateService
    val date = instance.loadDates
    assert(date === new DateTime())
  }
}      

DateService.scala

class DateService extends Serializable with Logging {

  private val configManager = new ConfigManager
  private lazy val datesTraitement = configManager.getParameter("dates.traitement").toInt

  def loadDates() {
    val date = selectFromDatabase(datesTraitement)
  }
}

不幸的是,当我运行测试时, datesTraitement 返回null而不是10,但m.getparameter(“dates.traitement”)确实返回10.

也许我在某个地方做某种反模式,但我不知道在哪里,请记住我是所有这些的新手,我没有找到任何适合我在互联网上的案例。< / p>

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

我认为问题是您的模拟未注入,因为您在ConfigManager类中内联DateService

而不是

class DateService extends Serializable with Logging {
  private val configManager = new ConfigManager
}

class DateService(private val configManager: ConfigManager) extends Serializable with Logging

并且在您的测试用例中,在构造DateService

时注入模拟的ConfigManager
class DateServiceTest extends FunSuite with MockitoSugar {
  val m = mock[ConfigManager]
  val instance = new DateService(m)
}