当前位置: 首页 > 知识库问答 >
问题:

Scalamock无法区分期货

段弘和
2023-03-14

在类.scala中有一段scala代码,有一个case类Case1,它包含一个Future字段f1,它属于另一个case类Case2的类型。Case2包含SEQ[String]。我将case2对象发送到另一个实例为B的类B

case class Case2(list: Seq[String])
case class Case1(f1: Future[Case2])

class A(b: B) {
   def doSomething() {
     val case1 = Case1(Future(Case2(List("Hello")))
     val result = b.doSomethingElse(case1)   // Another future returned
     result
  }
}

class ATest extends .... Some scalatest libraries {
    val bMock = mock[B]
    val a = new A(bMock)
    "A" should {
        "call b" in  {
            val case1 = Case1(Future(Case2(List("Hello")))
            val result = .....Anything....
            (b.doSomethingElse _).expects(case1).returning(Future.successful(result))
             a.doSomething().futureValue shouldBe .....Something
      }
    }
 }

测试失败,并返回一条消息,即对类B的模拟调用与actual不匹配。它打印预期和实际,但它们在日志中看起来是一样的。

理想情况下,测试应该通过,因为对B的模拟调用与B的实际调用匹配。但我怀疑这是因为case1包含了一个未来,它将其视为不同的对象。当我替换通配符(b.DoSomethingElse_).expects(*).returning(result)时。

共有1个答案

宿文栋
2023-03-14

您无法可靠地检查任何函数或正在进行的计算是否相等,因此:

  • 期货
  • 任务
  • 自由单子
  • DBIO
  • 函数类型

忘掉在它们上面使用marchers(无论是用于断言还是用于嘲弄)。

(b.doSomethingElse _).expects(*).returning(Future.successful(result))
 类似资料:
  • 我创建了一个与下面提到的工作流处理器特性类似的特性: 有人能帮忙吗?我发现为Scala类编写单元测试是非常困难的,而且还会嘲笑它们。 build.sbt中的最缩放版本:

  • 我在和斯卡拉莫克玩。当我试图使用ScalaMock来模拟一个测试用例中的对象时,我编写了一个KISS版本的错误。 应为:inAnyOrder{inAnyOrder{MetricsRegistry.RecordValue(*)两次(从未调用-未满足)}} 实际:ScalatestFailureLocation:ScalaMockError01Spec在(ScalaMockError01Spec.Sc

  • 我试图测试一个类,它具有两个函数:和。加载,调用,然后执行一些操作并返回新的。为举例起见: 使用如何编写测试代码? 我试过: 我希望测试成功通过,并且得到(我知道scalamock用mock替换了所有现有函数,但这不是预期的行为) 编辑:我在mockito中找到了这个引用这个概念的答案,但我不确定scalamock是否支持这种嘲讽,以及为什么要反对这种嘲讽。

  • 下面是代码、json文件和我在执行代码时得到的异常。 //JSON //读取上述JSON格式时发生异常 04-18 07:07:09.089 314 44-31460/?E/DOINBackgroupExcp:无法读取JSON:无法解析日期值“i”(格式:“YYYY-MM-DD”):无法解析的日期:“i”(通过引用链:com.example.admin.myApplication.ShiftPla

  • 操作系统实现了各种算法,以便找出链表中的空洞并将它们分配给进程。 关于每种算法的解释如下。 1. 第一拟合算法 第一拟合算法(First Fit)算法扫描链表,每当它找到第一个足够大的孔来存储进程时,它就会停止扫描并将进程加载到该进程中。 该过程产生两个分区。 其中,一个分区将是一个空洞,而另一个分区将存储该进程。 First Fit算法按照起始索引的递增顺序维护链表。这是所有算法中最简单的实现方

  • 我在Oracle 11g数据库中有一个这样的表 我想知道在给定的时间段内有多少张卡进行了充值,但我希望这些信息按日期分组。如果一张卡的id已经在一个日期计算过,则不应在下一个日期计算(不同)。 这里有一些测试数据 当我像这样执行查询时,总计数为4,这是正确的。 后果 但是,当我尝试这种方法时,我的总数是10。这是因为,当我在某个日期使用“分组依据”并在ID中使用“不同”时,这种区别只适用于分组日期