在 ScalaMock 中使用带有 mockedResource.expects(where(???)) 的自定义匹配器



我正在使用ScalaMock和ScalaTest来组合一些单元测试。我想使用 ScalaMok 的期望语法来确认我正在处理的服务将可接受的 Json 传递给模拟资源。在这种情况下,可接受意味着某些内部字段可能不同,因此我编写了一个自定义函数来确定我关心的字段是否匹配。这样做的问题是,当期望未得到满足时,它会产生相对无用的日志记录。设定的期望如下:

(mockedResource.doAThing(_: Json)(_: SomeImplicitThing))
  .expects(
    where(
      jsonSimilarAndImplicitEqual(
        expectedJson,
        anInstanceOfImplicitThing
      )(_, _)
    )
  )

失败时生成以下日志记录:

- should forward acceptable Json to the mockedResource
  Unsatisfied expectation:
  Expected:
  [info]   inAnyOrder {
  [info]     <mock-1> MockedResource.doAThing<function1> once (never called - UNSATISFIED)
  [info]   }

我希望能够提供一些自定义日志记录函数来描述为什么jsonSimilarAndImplicitEqual在一个合理的位置评估为 false。我希望一个inAnyOrderWithLogging块就足够了,但事实证明我什至不能使用这个结构,因为它不支持 AsyncMockFactory。

你可以使用 specs2-mock(Mockito 的包装器(而不是 ScalaMock,并使用参数捕获器。使用 org.specs2.Mockito 特征,您可以编写val captor = capture[String]然后there was one(value).method(captor.capture) .捕获参数后,可以使用 scalatest Matchers来断言相关属性。

相关内容

  • 没有找到相关文章

最新更新