我正在为不同的方法创建测试,但所有这些方法都非常相似 - 向Day添加了一些东西。
我已经为测试创建了Day对象,并且我已经模拟了一些像Database这样的东西。但是我在设置这个问题时遇到了问题。
例如:在我的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: 在这里检测到错位的参数匹配器: - > at service.activity.service.ActivitiesServiceTest.setUp(ActivitiesServiceTest.java:45)
您不能在验证或存根之外使用参数匹配器。 正确使用参数匹配器的示例: 当(mock.get(anyInt()))thenReturn(空)。 doThrow(新 的RuntimeException())时(模拟).someVoidMethod(anyObject())。 验证(模拟).someMethod(含有("富&#34))
此外,此错误可能会显示,因为您将参数匹配器与无法模拟的方法一起使用。 以下方法无法进行存根/验证:final / private / equals()/ hashCode()。
答案 0 :(得分:1)
正如消息所说
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表示形式返回为字符串
答案 1 :(得分:0)
你不应该在setUp方法中使用when子句。
this.classList
此外,如果您可以添加您想要测试的课程,我们可以更轻松地提供帮助。