使用AssertSame验证来自CacheBuilder的客户端实例



关于CacheBuilder的问题也许有人可以帮助:

我有一个这样定义的缓存:

private final Cache<String, ServiceClient> SERVICE_CLIENT_CACHE = CacheBuilder.newBuilder()
.maximumSize(1000)
.build();

从测试

调用的newRetryingClient类中的访问器逻辑
try {
return SERVICE_CLIENT_CACHE.get(clientConfigQualifier,
() -> newClient(clientConfigQualifier));
} catch (final ExecutionException ignored) {
throw new RuntimeException(ignored);
}
}

尝试验证缓存是否与测试一起工作,结果导致失败,因为不同的对象…

@Test
public void newRetryingClientWithMaterials() {
final clientFactory clientFactory = new clientFactory(authClient, mock(Identity.class));
final Client client1 = clientFactory.newRetryingClient(QUALIFIER);
final Client client2 = clientFactory.newRetryingClient(QUALIFIER);
assertSame(client1, client2);
}

测试结果

org.opentest4j.AssertionFailedError: 
Expected :com.place.thing.client.clientImpl@49d5c751
Actual   :com.place.thing.client.clienttImpl@40e90634

任何想法,如果有一个问题的实现或我期望从断言相同的错误行为?

您想测试两个对象是否引用相同的引用,或者您想检查它们是否相等?

参见assertSameassertEqual,但最重要的是阅读[Object#equals(Object)][3]==的区别。

最新更新