当前位置: 首页 > 知识库问答 >
问题:

junit-mockito-如何正确设置模拟对象

柯昆杰
2023-03-14
Item item = dbService.get(tableName, Collections.singletonList(primaryKey));
String measurementsJSON = item.getJSON("measurements");
@Before
public void setUp() throws Exception {
    activitiesService = new ActivitiesService(databaseControllerMock);
    when(eq(item).getJSON(anyString())).thenReturn(anyString());
}
java.lang.NullPointerException
at service.activity.service.ActivitiesServiceTest.setUp(ActivitiesServiceTest.java:45) //this line with "when..."

org.mockito.exceptions.misusing.invaliduseofmatchersexception:在此处检测到错误的参数匹配器:->at service.activity.service.activitesServiceTest.setup(activitesServiceTest.java:45)

不能在验证或短截之外使用参数匹配器。参数匹配器的正确用法示例:when(mock.get(anyInt())).ThenReturn(null);doThrow(新建RuntimeException()).When(mock).SomeVoidMethod(anyObject());验证(mock).someMethod(contains(“foo”))

此外,可能会出现此错误,因为您使用的参数匹配器带有无法嘲弄的方法。以下方法不能被截尾/验证:final/private/equals()/hashCode()。

共有1个答案

隗新霁
2023-03-14

正如信息所说

You cannot use argument matchers outside of verification or stubbing.
Examples of correct usage of argument matchers:
when(mock.get(anyInt())).thenReturn(null);

改变

when(eq(item).getJSON(anyString())).thenReturn(anyString());

到某个字符串返回,类似于

when(eq(item).getJSON(anyString())).thenReturn("{somekey:somevalue}");
 类似资料:
  • 在我的实现类中,我有一个读写锁定义,如下所示, 我在一个名为的方法中使用它, 正如我所说的,是null,但是rwLock是初始化的。请解释Mockito是如何发生这种情况的。理想的方法是什么?

  • 我有一个测试类包含测试方法和两个服务类和。我正在为类中的方法编写JUnit测试,该类包括对类方法的调用。在我写的测试方法中 因此,当调用时,它应该返回大小为1,但不返回此列表,返回的是一个大小为0的列表。

  • 我尝试测试一个发送jms消息的类,但无法模拟JmsTemplate JmsProducer.class: JmsProducerTest。类别: 当我运行这个测试用例时,它给了我:java。lang.IllegalArgumentException:对象不是声明类的实例 你对这个问题有什么想法吗?

  • 问题内容: 当我创建一个说类Employee的模拟对象时。它不调用Employee对象的构造函数。我知道Mockito在内部使用CGLIb和反射,创建了一个代理类,将该类扩展为模拟。如果未调用employee的构造函数,那么如何创建employee类的模拟实例? 问题答案: Mockito使用CGLib生成类对象。但是,要实例化此类对象,它使用Objenesis http://objenesis.

  • 是模拟抽象类:,而是接口。这是失败点: 如何模拟这段代码?

  • 有许多方法可以使用mockito初始化模拟对象。其中什么是最好的方法? 1. 建议我有没有比这些更好的方法...