MyService
类的方法返回java.util.Date
对象和MyManager
类正在调用MyService
类的方法。我正在编写MyManager
类的测试用例。
当我嘲笑使用Mockito模拟日期对象
Mockito.when(manager.getDate())).thenReturn((Date)Mockito.any())
不工作。有人可以帮我解决这个问题吗?
MyService
类的方法返回java.util.Date
对象和MyManager
类正在调用MyService
类的方法。我正在编写MyManager
类的测试用例。
当我嘲笑使用Mockito模拟日期对象
Mockito.when(manager.getDate())).thenReturn((Date)Mockito.any())
不工作。有人可以帮我解决这个问题吗?
我不认为你正在使用正确的语法。 any
成语用于在调用方法时匹配参数,而不用于指定被调用的模拟的返回值。有关这些工作方式的详细信息,请参见Matchers。
尝试提供一个真实的日期作为您的返回值。
我从您的代码行收集可能会错误地使用Mockito。
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
对象(您的代码所暗示的),如果你的测试:如果您使用的是嘲笑Service
那么你的代码可能看起来像测试Manager
Manager
类。
谢谢@sprinter – user1920
any
是匹配的Mockito,通常用来匹配调用的函数的参数,而不是返回值。在大多数情况下,返回值是具体的对象和类型是已知的,因此在thenReturn()
中使用any()
没有任何意义。
的Mockito嘲讽可以这样,如果你正在测试MyManager
类对MyService
类的依赖,如果一些的MyService
方法旨在被嘲笑,你首先需要创建一个嘲笑适用于只是嘲笑对象的方法对象为'MyService'类,然后使用when
子句来模拟该方法。 MyManager
不会被嘲笑。
像any()
这样的匹配器在点#2处出现,以匹配函数参数类型。在你的情况下,它的一个没有参数函数,所以没有匹配器需要。
如果您希望返回虚拟值,则通过thenReturn()
子句返回该值。您可以返回null
值或非空值。很明显,你必须创建一个对象,如果打算回非 - 空值(在你的情况,这可能是一个具体的Date
对象)
所以,你的代码应该是什么样子,
Mockito.when(service.getDate())).thenReturn(date);
OR Mockito.when(service.getDate())).thenReturn(null);
其中service
是MyService
类型和date
的嘲笑对象是预创建的Date
类型对象。
我们模拟依赖关系,而不是测试中的主题。
我正在使用java4和junit3 – user1920
你是什么意思不工作?编译错误,测试用例失败? – sidgate