【问题标题】:How to pass any UUID in a function in unit testing in mockito?如何在模拟单元测试中的函数中传递任何 UUID?
【发布时间】:2020-02-07 18:05:03
【问题描述】:

我有一个函数 func(),它接受 UUID 作为参数。我正在做一个单元测试,我需要为传递给 func() 的任何 UUID 值返回一个特定值。如何使它适用于任何 UUID 类型值(就像 anyString() 用于任何字符串,anyInt() 用于任何整数等)?

我已经试过了:

when(obj.func(any(UUID.class)).thenReturn(null);

它给出以下错误:

The method any(Class<UUID>) is ambiguous for the type <Test_Class_Name>

其中 Test_Class_Name 是我正在编写单元测试的类的名称。

func() 是一个重载函数:func(String) 和 func(UUID)

【问题讨论】:

  • 您是否尝试过显式强制转换以便轻松找到正确的方法? (即when(obj.func((UUID) any(UUID.class)).thenReturn(null);
  • 是的,没有用。
  • 你使用的是什么版本的 Mockito?
  • 正如 cmets 中所指出的,任何(Matchers 和 CoreMatchers)的多次导入都是问题所在。谢谢。

标签: java generics junit mockito testng


【解决方案1】:

对于任何其他类型,您可以使用any()。这将匹配给定类型的参数:

any(UUID.class)

您可以在documentation找到更多信息。

【讨论】:

  • 我已经尝试过了,但它不起作用:when(obj.func(any(UUID.class)).thenReturn(null); 它显示以下错误:类型不匹配:无法从匹配器 到 UUID
  • @AbdulAhad 你试过不带参数吗?只是any()?
  • 问题在于 func 是一个重载的函数,因此会产生歧义问题。函数(字符串)和函数(UUID)。还要更新错误是:方法 any(Class) 对于类型 不明确 这在这两种情况下,前一个错误都是由于括号不匹配造成的。
  • 抱歉,我不能,因为这不是个人项目。
  • @AbdulAhad 试试org.mockito.ArgumentMatchers.any(UUID.class)。看来您调用了其他一些any 方法。
猜你喜欢
  • 2020-10-27
  • 1970-01-01
  • 2010-11-17
  • 2017-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-11
  • 1970-01-01
相关资源
最近更新 更多