java - 如何在单元测试中站起来然后关闭 Solr 实例?

标签 java unit-testing solr jetty apache-camel

我正在编写 Camel 单元测试。我与之交互的一项服务是 Solr。使用模拟测试后,我想编写启动本地 solr 实例的测试。

到目前为止,我已尝试利用 RestTestBase Solr 类 (org.apache.solr.util.RestTestBase)。因为我正在编写单元测试,所以我没有扩展该类,只是尝试使用它提供的静态方法。以下内容不起作用:

RestTestBase.createJettyAndHarness("src/test/resources/solr",
                                   "solrconfig.xml", "schema.xml",
                                   "/solr", true, null);
int solrPort = RestTestBase.jetty.getLocalPort();
String solrURL = "localhost:"+Integer.toString(solrPort)+"/solr";
...

我在我的 pom.xml 中包含了 solr 和 jetty。关于如何以编程方式启动和关闭 solr 实例有什么建议吗? (因为我使用的是camel单元测试,所以我不喜欢扩展RestTestBase)

最佳答案

请参阅camel-solr 单元测试以获取一些完整的示例... SolrComponentTestSupport

基本上是这样...

@BeforeClass
public static void beforeClass() throws Exception {
    // Set appropriate paths for Solr to use.
    System.setProperty("solr.solr.home", "src/test/resources/solr");
    System.setProperty("solr.data.dir", "target/test-classes/solr/data");

    // Instruct Solr to keep the index in memory, for faster testing.
    System.setProperty("solr.directoryFactory", "solr.RAMDirectoryFactory");

    // Start a Solr instance.
    solrRunner = new JettySolrRunner("src/test/resources/solr", "/solr", getPort());
    solrRunner.start();

    solrServer = new HttpSolrServer("http://localhost:" + getPort() + "/solr");
}

@AfterClass
public static void afterClass() throws Exception {
    if (solrRunner != null) {
        solrRunner.stop();
    }
}

关于java - 如何在单元测试中站起来然后关闭 Solr 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24307634/

相关文章:

angular - 如何用 Jest 模拟组件中使用的 "nested" Angular 服务

unit-testing - React Native Jest Enzyme Find and Press 组件

xml - 如何使用单个 solr 实例索引和搜索同一数据源中的两个不同表(两个不同的搜索字段无连接)

在 solr 中加入多核

java - 设置 SOLR SSL 属性

java - 如何为多个JLabel[]添加鼠标监听器

java - 如何在 Mockito 和 JUnit 中模拟具有复杂请求的服务?

java - XStream 不会调用 readObject()

java - 为什么我通过 Bazel 构建的应用程序在添加 Firebase 依赖项后一打开就会崩溃?

java - 在 ConcurrentHashMap.computeIfAbsent 和 ConcurrentHashMap.computeIfPresent 中执行 `mappingFunction`