我们最近更改了其中一项服务的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.eq
和org.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)