EasyMock:将对象与其克隆进行比较时出现 AssertionError
EasyMock: AssertionError on comparing object with its clone
我遇到这样的断言错误:
java.lang.AssertionError:
Unexpected method call ICustomerDAO.getVersionStamps(-1, ["CustomerData", "UserData"], EasyMock for interface java.sql.Connection):
ICustomerDAO.getVersionStamps(-1, ["CustomerData", "UserData"], EasyMock for interface java.sql.Connection): expected: 1, actual: 0
at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:44)
at org.easymock.internal.ObjectMethodsFilter.invoke(ObjectMethodsFilter.java:94)
at com.sun.proxy.$Proxy3.getVersionStamps(Unknown Source)
at com.mgmt.ConfigClient.getRequestedVersions(ConfigClient.java:200)
at com.mgmt.ConfigClientTest.testGetRequestedVersions(ConfigClientTest.java:329)
测试代码如下:
@Test
public void testGetRequestedVersions() {
ConfigClient client = new ConfigClient();
client.dao = EasyMock.createStrictMock(ICustomerDAO.class);
Connection connection = EasyMock.createStrictMock(Connection.class);
long[] versions = {34, 12};
EasyMock.expect(client.dao.getVersionStamps(-1, ConfigFilesRegenTask.getRequestedVersions(), connection)).andReturn(versions);
EasyMock.replay(client.dao);
ConfigToken token = client.getRequestedVersions(connection);
EasyMock.verify(client.dao);
assertEquals("Wrong customer version", versions[0], token.getCustomerVersion());
}
配置客户端class:
public ConfigToken getRequestedVersions(Connection connection) {
final ConfigToken token = new ConfigToken(-1, -1);
long[] requestedVersions = dao.getVersionStamps( -1, ConfigFilesRegenTask.getRequestedVersions(), connection);
token.setCustomerVersion(requestedVersions[0]);
return token;
}
并且 ConfigFilesRegenTask class 包含 returns 现有数组的克隆 的 get 方法:
public static String[] getRequestedVersions() {
return REQUESTED_VERSIONS.clone();
}
仅当我return数组的REQUESTED_VERSIONS
克隆时才会出现断言错误。
我怎样才能避免这种情况?
按照你的例子有点难,但我最好的猜测是你需要使用数组相等性 argument matcher 而不是默认匹配器,它检查 .equals(),对数组不太有用.
尝试将您的期望更改为:
EasyMock.expect(client.dao.getVersionStamps(eq(-1), aryEq(ConfigFilesRegenTask.getRequestedVersions()), eq(connection))).andReturn(versions);
我遇到这样的断言错误:
java.lang.AssertionError:
Unexpected method call ICustomerDAO.getVersionStamps(-1, ["CustomerData", "UserData"], EasyMock for interface java.sql.Connection):
ICustomerDAO.getVersionStamps(-1, ["CustomerData", "UserData"], EasyMock for interface java.sql.Connection): expected: 1, actual: 0
at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:44)
at org.easymock.internal.ObjectMethodsFilter.invoke(ObjectMethodsFilter.java:94)
at com.sun.proxy.$Proxy3.getVersionStamps(Unknown Source)
at com.mgmt.ConfigClient.getRequestedVersions(ConfigClient.java:200)
at com.mgmt.ConfigClientTest.testGetRequestedVersions(ConfigClientTest.java:329)
测试代码如下:
@Test
public void testGetRequestedVersions() {
ConfigClient client = new ConfigClient();
client.dao = EasyMock.createStrictMock(ICustomerDAO.class);
Connection connection = EasyMock.createStrictMock(Connection.class);
long[] versions = {34, 12};
EasyMock.expect(client.dao.getVersionStamps(-1, ConfigFilesRegenTask.getRequestedVersions(), connection)).andReturn(versions);
EasyMock.replay(client.dao);
ConfigToken token = client.getRequestedVersions(connection);
EasyMock.verify(client.dao);
assertEquals("Wrong customer version", versions[0], token.getCustomerVersion());
}
配置客户端class:
public ConfigToken getRequestedVersions(Connection connection) {
final ConfigToken token = new ConfigToken(-1, -1);
long[] requestedVersions = dao.getVersionStamps( -1, ConfigFilesRegenTask.getRequestedVersions(), connection);
token.setCustomerVersion(requestedVersions[0]);
return token;
}
并且 ConfigFilesRegenTask class 包含 returns 现有数组的克隆 的 get 方法:
public static String[] getRequestedVersions() {
return REQUESTED_VERSIONS.clone();
}
仅当我return数组的REQUESTED_VERSIONS
克隆时才会出现断言错误。
我怎样才能避免这种情况?
按照你的例子有点难,但我最好的猜测是你需要使用数组相等性 argument matcher 而不是默认匹配器,它检查 .equals(),对数组不太有用.
尝试将您的期望更改为:
EasyMock.expect(client.dao.getVersionStamps(eq(-1), aryEq(ConfigFilesRegenTask.getRequestedVersions()), eq(connection))).andReturn(versions);