gpt4 book ai didi

Scala:Mock init 因 Cats IO 类型参数而失败

转载 作者:行者123 更新时间:2023-12-01 13:59:55 25 4
gpt4 key购买 nike

在编写测试时我遇到了以下异常:

java.lang.ClassCastException: codegen.java.lang.Object$MockitoMock$641592186 cannot be cast to cats.effect.IO (MyRepositorySpec.scala:19)

使用 specs2 运行此测试代码时发生:

class MyRepositorySpec extends Specification with Mockito with TestData {
...
val m = mock[MyDAO[IO]].smart
m.createTable returns IO { Right[Throwable, Int](1) } // <- this is line 19

val r = new MyRepository[IO](m)
r.setup.unsafeRunSync() must beNone
...
}

MyDAO 看起来像这样:

class MyDAO[M[_] : Monad](val transactor: Transactor[M])(implicit val AE: ApplicativeError[M, Throwable]) extends DataAccessObject[M, MyObject]

DataAccessObject 像这样:

trait DataAccessObject[M[_], T <: Entity]

我不知道如何解决/正确实现此问题。任何帮助,将不胜感激。谢谢!

最佳答案

尝试

class IOMyDAO(override val transactor: Transactor[IO]) extends MyDAO[IO](transactor)

val m = mock[IOMyDAO].smart

基于此answer .


您应该尝试使用 org.mockito.Mockito#when 而不是 specs2 的内部方法匹配功能:

when(m.createTable) thenReturn IO { Right[Throwable, Int](1) }

代替

m.createTable returns IO { Right[Throwable, Int](1) }

关于Scala:Mock init 因 Cats IO 类型参数而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46448457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com