Android Mockito验证方法调用
我正在尝试学习如何使用Mockito,我被如何验证某个对象上的方法被调用了X次的问题所困扰 我有以下测试代码Android Mockito验证方法调用,android,mockito,robolectric,roboguice,Android,Mockito,Robolectric,Roboguice,我正在尝试学习如何使用Mockito,我被如何验证某个对象上的方法被调用了X次的问题所困扰 我有以下测试代码 verify(record, times(1)).setValue(Mockito.any(String.class),Mockito.any(String.class)); 下面是我要测试的一段生产代码 我正在设置要迭代的字符串[] protected String[] columnNames = {"_id", "created_at", "updated_at", "name"}
verify(record, times(1)).setValue(Mockito.any(String.class),Mockito.any(String.class));
下面是我要测试的一段生产代码
我正在设置要迭代的字符串[]
protected String[] columnNames = {"_id", "created_at", "updated_at", "name"};
protected ColumnType[] columnTypes = {ColumnType.INTEGER, ColumnType.TIMESTAMP, ColumnType.TIMESTAMP, ColumnType.TEXT};
以及循环中的生产代码,循环遍历字符串[]
for (int i = 0; i < columnCount; i++) {
if (columnNames[i].equals("_id")) {
record.setId(cursor.getInt(0));
} else {
switch (columnTypes[i]) {
case BOOL:
record.setValue(columnNames[i], cursor.getInt(i));
break;
case TEXT:
record.setValue(columnNames[i], cursor.getString(i));
break;
case INTEGER:
record.setValue(columnNames[i], cursor.getInt(i));
break;
case TIMESTAMP:
record.setValue(columnNames[i], cursor.getLong(i));
break;
case LONG:
record.setValue(columnNames[i], cursor.getLong(i));
break;
case DOUBLE:
record.setValue(columnNames[i], cursor.getDouble(i));
break;
default:
record.setValue(columnNames[i], "");
break;
}
}
}
这就是我得到的错误
testDataSourceCanFindRecordcom.test.app.DataSourceTest时间
在com.test.core.DataSource.cursorToRecordDataSource.java:210处运行时间:0.081秒
我希望record.setValueString键、String值调用一次,因为字符串[]中的name字段。发生的情况是Mockito正在注册record.setValueString键,Long值与record.setValueString键,String值相同,这是不正确的。第210行是时间戳情况下的设置值。如何更正此问题?如果您查看源代码,检查方法相等性的逻辑似乎比您想象的要宽松一些,并且在某些情况下可以忽略方法重载 我不是100%确定,但是尝试用isAString.class替换接受of的anyString.class,这将过滤掉该参数不是字符串的调用。anyString仅在Mockito 2.0及更高版本中检查其类型。与直觉相反,anyFoo.class并不意味着什么,只要它是一个Foo,它就意味着什么
当然,您也可以加强验证,以便它检查键或值是否等于预期值,但我不确定在您的情况下这是否可能。如何创建光标?我认为在不模拟的情况下使用real record对象会容易得多,并在从游标设置值后验证值是否正确。我正在模拟游标。除了正在测试的DataSource类之外,我正在模拟所有的东西。我仍在试图弄清楚该嘲笑什么,不该嘲笑什么