我正在尝试使用JUnits测试将数据持久保存到elasticsearch的功能。这是我第一次使用JUnits,这是我的第一次测试用例。
我有一个类似下面的界面
public interface ElasticSearchIndexer {
void writeTo(String inputJson) throws IOException;
}
接口由多个类实现。示例实现如下所示
public class HardwareEOXIndexer implements ElasticSearchIndexer {
private static final Logger logger = LoggerFactory.getLogger(HardwareEOXIndexer.class);
private final String es_index = "/hardwareeox/inv/";
private String hostname;
public HardwareEOXIndexer(String hostname) {
this.hostname = hostname;
}
public void writeTo(String inputJson) throws IOException {
ReadContext ctx = JsonPath.parse(inputJson);
String hardwareEOXId = Integer.toString(ctx.read("$.EoXBulletin.items[0].hardwareEOXId"));
StringBuilder documentID = new StringBuilder().append(hardwareEOXId);
logger.info("Indexing the document with ID :: {} ", documentID.toString());
try {
new ElasticSearchContext().getContext(hostname, inputJson, es_index, documentID);
} catch (Exception e) {
e.printStackTrace();
logger.error("HardwareEOXIndexer : es_index: " + es_index + " ------> " + e.getMessage());
}
}
}
如何模拟elasticsearch的行为以及如何编写单元测试。
答案 0 :(得分:1)
接口部分在问题中是假的,核心点是:
如何模拟elasticsearch的行为以及如何编写单元测试。
基本上有两个答案:
new
的调用。我绝对建议您选择第一个选项:因为这会改善您的设计。你知道,为什么你要将所有代码紧密地耦合到弹性搜索?但是假设这个实现已经被认为是围绕弹性搜索的抽象层 - 那么你仍然应该使用依赖注入来获取实际调用方法所需的ElasticSearch
对象。如上所述,使用工厂或真正的DI框架。这将允许你说"简单"模拟框架,如Mockito或EasyMock。