以下是一组虚构的case classes
。实际上我们有类似的ADT。
case class Alphabet(a:Character)
case class Word(alphabets: List[Alphabet])
case class Sentence(words : List[Word])
case class Paragraph(sentences : List[Sentence])
case class Chapter(paras : List[Paragraph])
有服务API,如下所示。
def saveSentence(sentence : Sentence)
def saveParagraph(paragraph : Paragraph)
def saveChapter(chapter:Chapter)
有多种测试可以测试上述API。对saveChapter
的测试将准备构建Chapter
等所需的所有数据。
如果你想创建“可组合”的功能,比如说
val alphabests :List[Alphabet] = ...
generateWord(alphabests).compose
生成Word
,同样适用于其他数据。其中前一个函数的输出变为后续函数的输入,其中包含从上一步骤构建的必要数据,用于下一步骤。
在不依赖于测试框架的情况下,您将使用哪些模式来实现此类行为(在这种情况下为scalatest)
答案 0 :(得分:0)
我不确定,如果我理解你的话,但是已经为scala函数提供了这个功能。
object Main extends App {
def f(x: Int): Int = x * 2
def g(x: Int): Int = x + 1
def h(x: Int): Int = x + 100
val x = g _ compose f compose h
val y = g _ andThen f andThen h
println(x(5))
println(y(5))
}
此处 x 和 y 是由函数组成的。只是不要将实际参数传递给 generateWord 。