在 Specs2 Mockito 中使用带有 java.lang.UUID 的 eq 匹配器



我们最近更改了其中一项服务的API,它曾经是:

def updateSubtitle(subtitleId: String...): Subtitle

现在是:

def updateSubtitle(subtitleId: UUID, ...): Subtitle

之前我们这样写下我们的期望:

there was one(subtitleService).updateSubtitle(eq(subtitleId), ...)

这将不再起作用subtitleId因为现在是一个UUID而不是一个String。 我不得不将eq(subtitleId)更改为any[UUID]但这太通用了,因为它实际上并没有测试subtitleId值,它只关心传递了类型 UUID 的值。

如何让eq匹配器与UUID一起工作?

eq(subtitleId)确实适用于UUID,因为UUID.equals方法已正确实现(https://docs.oracle.com/javase/6/docs/api/java/util/UUID.html#equals(java.lang.Object)。

您可能遇到scala.AnyRef.eqorg.mockito.Matchers.eq之间的命名冲突问题(请参阅 https://github.com/etorreborre/specs2/issues/361)。这可以通过以下任一方法解决:

  • 完全引用Matchers.eq(即 one(subtitleService).updateSubtitle(org.mockito.Matchers.eq(subtitleId), ...) ) 或
  • 使用 Scala 导入别名更改Matchers.eq名称(即 import org.mockito.Matchers.{eq => meq, _}并相应地更改匹配器的使用meq(subtitleId)

相关内容

  • 没有找到相关文章