MyService
类的方法返回java.util.Date
对象,MyManager
类正在调用MyService
类的方法。我正在为MyManager
类编写测试用例。
当我嘲笑时
Mockito.when(manager.getDate())).thenReturn((Date)Mockito.any())
不工作。有人可以帮我吗?
我认为您没有正确使用语法。any
习惯用法用于在调用方法时匹配参数,而不是用于指定模拟调用的返回值。有关这些工作原理的详细信息,请参阅匹配器。
尝试提供真实日期作为返回值。
我从您的代码行中了解到您可能错误地使用了 Mockito。如果您使用模拟Service
测试Manager
,那么您的代码可能如下所示:
Date testDate = new Date("01/01/1970");
Service mockedService = mock(Service.class);
when(service.getDate()).thenReturn(testDate);
testManager.setService(service);
assertEquals(testDate, testManager.getServicesDate());
换句话说,如果您正在测试 Manager
类,您通常不会模拟 Manager
对象(如代码所暗示的那样(。
-
any
是一个 Mockito 匹配器,通常用于匹配调用的函数参数,而不是返回值。在大多数情况下,返回值是具体的对象,类型是已知的,因此在thenReturn()
中使用any()
是没有意义的。 -
Mockito模拟可以应用于仅模拟对象的方法,因此,如果您正在测试
MyManager
依赖于该类的类MyService
并且如果某些MyService
方法打算被模拟,则首先需要为"MyService"类创建一个模拟对象,然后使用when
子句来模拟该方法。MyManager
不会被嘲笑。 -
像
any()
这样的匹配器出现在点 # 2 中,以匹配函数参数类型。在你的例子中,它是一个无参数函数,所以不需要匹配器。 -
如果您希望返回虚拟值,则通过
thenReturn()
子句返回该值。您可以返回null
值或非空值。显然,如果计划返回非空值,则必须创建对象(在您的情况下,它可能是一个具体的Date
对象(
所以你的代码应该看起来像,
Mockito.when(service.getDate())).thenReturn(date);
或Mockito.when(service.getDate())).thenReturn(null);
其中service
是MyService
类型的模拟对象,date
是预先创建的Date
类型对象。
我们模拟依赖关系,而不是被测试的对象。