gpt4 book ai didi

java - JUnit 测试 Spymemcached 客户端

转载 作者:行者123 更新时间:2023-11-29 05:22:23 28 4
gpt4 key购买 nike

我有一个环绕 spymemcached 客户端的类,我想编写一些 JUnit 测试来测试 getValue 和 addKey 方法是否有效。

问题是测试服务器无法访问 spymemcached 服务器,所以我想这里需要进行一些模拟。

我的简化类看起来像这样:

public class SpyMemcachedClientWrapper {

private MemcachedClient spyMemcachedClient;

public SpyMemcachedClientWrapper()
spyMemcachedClient = new MemcachedClient(new ConnectionFactoryBuilder().build(),
AddrUtil.getAddresses("192.168.1.122:11211"));
}

public Object getValue(Object key) {
Object obj = null;
Future<Object> f = null;

f = spyMemcachedClient.asyncGet(key);

try {
obj = f.get(2000, TimeUnit.MILLISECONDS);
} catch (TimeoutException ex) {
f.cancel(false);
}

return obj;
}

public boolean addKey(Object key, Object value) {
OperationFuture<Boolean> t = spyMemcachedClient.set(key, 0, value);
return t.getStatus().isSuccess();
}
}

能否请您给我一些提示或最佳实践建议,我该如何为这个类编写 SpyMemcachedClientWrapperTest?我在想我可以使用 Mockito 或 EasyMock(Mockito 更可取,但如果 EasyMock 在这里更好,那也很好)但到目前为止我无法弄清楚在这种情况下编写测试通常首选的方式是什么。

也将不胜感激。

非常感谢,

最佳答案

我认为问题在于您问错了自己的问题。你想测试什么?这些是从最不可能到最有可能的顺序。

  • 您是否正在尝试测试 SpyMemcached 库是否正常工作?
    • 如果这是真的,那么您不应该测试您的包装器。
  • 您是否正在尝试测试您的类是否调用了 SpyMemcachedClientWrapper 的正确方法?
    • 如果是这样,您应该测试其他类,并提供 SpyMemcachedClientWrapper 的模拟。
  • 您是否正在尝试测试 SpyMemcachedClientWrapper 在各种情况下调用 MemcachedClient 的正确方法?

首先,您努力测试它的原因是您在包装器的构造函数中调用 new。这就是依赖注入(inject)发挥作用的地方。换句话说,从这个答案中得出的主要结论是:

您实际上不需要 SpyMemcached 来测试此行为。

该行为与 SpyMemcached 无关!您所需要的只是界面。但是,因为您在构造函数中调用了 new,所以您实际上无法获取此代码以提供例如 MemcachedClient 的模拟。 This article is an absolute, must read for you.

不过,我将简要总结那篇文章的结论,以及它们如何适用于您的情况。您可以:

  1. 不喜欢 Use PowerMock to override the behavior of the new operator .通过这种方式,您可以将 MemcachedClient 对象的创建替换为模拟并对其调用 verify 方法。
  2. 首选 重构您的构造函数以使用 dependency injection ,然后简单地将模拟传递给构造函数中的包装器。这将允许您根据需要调用 verify

关于java - JUnit 测试 Spymemcached 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24149755/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com