- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 cat 和函数式编程方面的新手,我正在努力对 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
提供 IOMatchers
启用以下语法的特征
library.create(book).value must returnValue(Right(book))
在哪里
libraryDependencies += "org.specs2" %% "specs2-core" % "4.8.1" % Test,
libraryDependencies += "org.specs2" %% "specs2-cats" % "4.8.1" % Test,
这是一个工作示例
import cats.data.EitherT
import cats.effect.IO
import org.specs2.mutable.Specification
import org.specs2.matcher.IOMatchers
class CatsSpec extends Specification with IOMatchers {
case class Book(title: String, year: Int, author: String)
def create(book: Book): EitherT[IO, String, Book] = EitherT(IO(Right(book).withLeft[String]))
val book = Book("Title 1", 2016, "author 1")
"specs2-cats dependency" should {
"provide matcher for IO effect" in {
create(book).value must returnValue(Right(book))
}
}
}
关于scala - 猫 EitherT 和效果的匹配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59234283/
我已经编写了以下代码来替换我从 readFile 获得的错误消息: module Main where import Control.Error import qualified Data.ByteS
我花了半天时间试图弄清楚如何使用 EitherT 来处理我的代码中的错误。 我已经定义了一个这样的变压器堆栈。 -- Stuff Monad data StuffConfig = StuffConfi
我正在使用 Scalaz 7 的 EitherT 来构建混合 State 和\/的 for 推导式。到目前为止,一切都很好;我得到的基本上是: State[MyStateType, MyLeftTyp
我是 cat 和函数式编程方面的新手,我正在努力对 EitherT 等函数式数据类型进行单元测试。有示例代码: class Library[F[_]]() { def create(book:
我有以下一个 Web API 的小型示例应用程序,它需要一个巨大的 JSON 文档,并且应该将其分段解析并报告每个部分的错误消息。 以下代码是使用 EitherT(和错误包)的工作示例。然而,问题是
我是 cat 和函数式编程方面的新手,我正在努力对 EitherT 等函数式数据类型进行单元测试。有示例代码: class Library[F[_]]() { def create(book:
我没看到 here根据 EitherT 的定义,也不是 here根据 Applicative 的定义。 它不应该在类型模块或类型类模块中定义,以避免被孤立吗?它在哪里? 最佳答案 docs page
假设我有返回 Future[Either[_, _] 的函数,并且我想在失败的情况下应用其中一些函数,这意味着仅将它们应用于左侧。简化的例子是: def operation1: Future[Eith
我正在尝试为猫寻找一个例子 EitherT.collectRight 。我有一个EitherT[Future, String, Event]当我这样做时collectRight,我明白了 Error:
例如,拥有... consumer :: Proxy p => () -> Consumer p a (EitherT String IO) () producer :: Proxy p => ()
如果我理解正确,EitherT[Option,A,B] 应该与 Option[Either[A,B]] 相同,但编译器不同意.以下代码编译失败: def f[A,B] = implicitly[Eit
我正在尝试根据 question 调整我的代码.一切都很好,除了我的方法返回 scalaz.\/ 而不是 scala.util.Either。所以现在我必须写一个像这样的猴子代码: def myFun
我正在尝试编写一些功能测试,并且我想模拟使用外部提供程序的服务。但我无法为返回 EitherT 的函数设置模拟 这是其实现调用外部服务的 Trait @ImplementedBy(classOf[Ex
我想用猫 EitherT和 OptionT处理类型 Future[Either[Error, Option[T]] .假设有以下方法: def findTeacher(id: Int): Future
我是一名优秀的程序员,十分优秀!