使用 Mockito 的模拟日期对象



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 对象(如代码所暗示的那样(。

  1. any 是一个 Mockito 匹配器,通常用于匹配调用的函数参数,而不是返回值。在大多数情况下,返回值是具体的对象,类型是已知的,因此在thenReturn()中使用any()是没有意义的。

  2. Mockito模拟可以应用于仅模拟对象的方法,因此,如果您正在测试MyManager依赖于该类的类MyService并且如果某些MyService方法打算被模拟,则首先需要为"MyService"类创建一个模拟对象,然后使用when子句来模拟该方法。 MyManager不会被嘲笑。

  3. any()这样的匹配器出现在点 # 2 中,以匹配函数参数类型。在你的例子中,它是一个无参数函数,所以不需要匹配器。

  4. 如果您希望返回虚拟值,则通过thenReturn()子句返回该值。您可以返回null值或非空值。显然,如果计划返回非空值,则必须创建对象(在您的情况下,它可能是一个具体的Date对象(

所以你的代码应该看起来像,

Mockito.when(service.getDate())).thenReturn(date);

Mockito.when(service.getDate())).thenReturn(null);

其中serviceMyService类型的模拟对象,date是预先创建的Date类型对象。

我们模拟依赖关系,而不是被测试的对象。

相关内容

  • 没有找到相关文章

最新更新