私は猫と関数型プログラミングが初めてで、のような関数型データ型の単体テストに苦労しています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)