[英]Junit - Mockito - how to setUp mocked objects properly
我正在为不同的方法创建测试,但是所有这些方法都非常相似-为Day添加了一些东西。
我创建了Day对象进行测试,并且嘲笑了诸如Database之类的东西。 但是我在正确设置它方面遇到了问题。
例如:一个返回Day以在我的addSomething()
方法中使用Day的方法是这样的:
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:在此处检测到放错位置的参数匹配器:->在service.activity.service.ActivitiesServiceTest.setUp(ActivitiesServiceTest.java:45)
您不能在验证或存根之外使用参数匹配器。 正确使用参数匹配器的示例:when(mock.get(anyInt()))。thenReturn(null); doThrow(new RuntimeException())。when(mock).someVoidMethod(anyObject()); 验证(模拟).someMethod(包含( “富”))
另外,可能会出现此错误,因为您将参数匹配器与无法模拟的方法一起使用。 以下方法不能存根/验证:final / private / equals()/ hashCode()。
如消息所述
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}");
我假设您想将json表示形式返回为字符串
您不应该在setUp方法中使用when子句。
@Before
public void setUp() throws Exception {
activitiesService = new ActivitiesService(databaseControllerMock);
}
@Test
public void testSomething() {
when(eq(item).getJSON(anyString())).thenReturn(anyString());
}
此外,如果您可以添加要测试的课程,我们可以更轻松地提供帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.