在 Specs2 Mockito 中使用带有 java.lang.UUID 的 eq 匹配器
Using an eq matcher with java.lang.UUID in Specs2 Mockito
我们最近更改了一项服务的 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
值,它只关心 [=15= 类型的值]通过了。
如何让 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)
我们最近更改了一项服务的 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
值,它只关心 [=15= 类型的值]通过了。
如何让 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)