Scala:测试内部功能

时间:2017-05-24 08:12:54

标签: scala unit-testing

scala很新,希望得到一些帮助,如果我有这样的方法,如何测试这个prepareCappuccino方法?有没有像mokito.spy这样的内在方法?谢谢 http://danielwestheide.com/blog/2013/01/09/the-neophytes-guide-to-scala-part-8-welcome-to-the-future.html

def prepareCappuccino(): Future[Cappuccino] = {
  def grind
  def heatWater
  def fronthMilk
  def brew
  // implementation of these methods above within this prepareCappuccino method
  for {
    ground <- grind("arabica beans")
    water <- heatWater(Water(20))
    foam <- frothMilk("milk")
    espresso <- brew(ground, water)
  } yield combine(espresso, foam)
}

1 个答案:

答案 0 :(得分:0)

由于您已经对实际值进行了硬编码,因此您只需测试预期的输出。

import scala.concurrent.ExecutionContext.Implicits.global

val expected = Cappuccino(...)
val f = prepareCappuccino()
f.map(c => assert(c == expected))

查看ScalaTest,Specs2和ScalaCheck,它们是scala的既定测试框架。 ScalaCheck为您提供基于属性的测试,前两者之间的选择仅仅是品味问题。只需选择一个你更喜欢的。

期货的处理可以通过阻止(不鼓励)或异步测试来完成。以下是有关它的ScalaTest文档的链接:http://www.scalatest.org/user_guide/async_testing

请注意&#34;真实代码&#34;你应该避免以一种使测试复杂化的方式构建你的代码。