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)
}
答案 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;你应该避免以一种使测试复杂化的方式构建你的代码。