我是猫和函数式编程的新手,并且正在尝试对EitherT
这样的函数数据类型进行单元测试。有示例代码:
class Library[F[_]]() {
def create(book: Book)(implicit M: Monad[F]): EitherT[F, BookAlreadyExistsError, Book] = ...
}
我想使用Spec2进行测试,但我不知道如何正确执行。尝试过类似的操作,但不起作用:
val library = Library[IO]()
test("create book") {
val book = Book("Title 1", 2016, "author 1")
(for (
resultBook <- library.create(book)
) yield resultBook shouldEqual ???
).unsafeRunSync()
}
我想要一个非常简单的断言,像这样:
resultBook shouldEqual Right(Book("Title 1", 2016, "author 1"))
// or
resultBook shouldEqual Left(BookAlreadyExistsError)
[specs2-cats
提供specs2-cats
特征以启用以下语法
IOMatchers
where
IOMatchers
这是一个可行的示例
library.create(book).value must returnValue(Right(book))