【发布时间】:2015-06-10 17:31:32
【问题描述】:
在以前版本的 Elastic4s 中,您可以执行类似的操作
val argument1: ArgumentCapture[DeleteIndexDefinition] = ???
verify(client).execute(argument1.capture())
assert(argument1 == ???)
val argument2: ArgumentCapture[IndexDefinition] = ???
verify(client, times(2)).execute(argument2.capture())
assert(argument2 == ???)
在您的测试中执行了几次之后(即一个DeleteIndexDefinition,然后是两个IndexDefinition)。每个验证都将与其类型匹配。
不过,Elastic4s 现在在其client.execute 方法中采用了一个隐式参数。该参数的类型为Executable[T,R],这意味着您现在需要类似
val argument1: ArgumentCapture[DeleteIndexDefinition] = ???
verify(client).execute(argument1.capture())(any[Executable[DeleteIndexDefinition,R]])
assert(argument1 == ???)
val argument2: ArgumentCapture[IndexDefinition] = ???
verify(client, times(2)).execute(argument2.capture())(any[Executable[IndexDefinition,R]])
assert(argument2 == ???)
这样做之后,我遇到了一个错误。 Mockito 在第一次验证中同时考虑了三个client.execute。是的,即使第一个参数的类型不同。
这是因为隐式(第二个参数)在类型擦除之后具有相同的类型Executable。
所以断言失败了。如何在此设置中进行测试?
【问题讨论】: