小编mic*_*los的帖子

猫的匹配器EitherT和效果

我是猫和函数式编程的新手,我正在努力进行单元测试函数数据类型,如EitherT. 有示例代码:

class Library[F[_]]() {
    def create(book: Book)(implicit M: Monad[F]): EitherT[F, BookAlreadyExistsError, Book] = ...
}
Run Code Online (Sandbox Code Playgroud)

我想使用 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()

  }
Run Code Online (Sandbox Code Playgroud)

我想有这样的非常简单的断言:

   resultBook shouldEqual Right(Book("Title 1", 2016, "author 1"))
   // or
   resultBook shouldEqual Left(BookAlreadyExistsError)
Run Code Online (Sandbox Code Playgroud)

functional-programming scala specs2 scala-cats cats-effect

1
推荐指数
1
解决办法
335
查看次数