Java 如何在单元测试中启动然后关闭Solr实例?

Java 如何在单元测试中启动然后关闭Solr实例?,java,unit-testing,solr,jetty,apache-camel,Java,Unit Testing,Solr,Jetty,Apache Camel,我正在编写单元测试。我使用的一个服务是Solr。在使用mock进行测试之后,我想编写一些测试,以生成一个本地solr实例 到目前为止,我已经尝试利用RestTestBase Solr类(org.apache.Solr.util.RestTestBase)。因为我正在编写一个单元测试,所以我没有扩展这个类,只是尝试使用它提供的静态方法。以下操作不起作用: 我的pom中包括solr和jetty。关于如何以编程方式启动和关闭solr实例,有什么建议吗?(因为我使用的是camel单元测试,所以我不想扩展

我正在编写单元测试。我使用的一个服务是Solr。在使用mock进行测试之后,我想编写一些测试,以生成一个本地solr实例

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


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

有关一些完整的示例,请参阅camel-solr单元测试

基本上这

@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();
    }
}

谢谢你的帮助。这正是我要找的。然而,我遇到了一个问题。当我尝试与solr实例交互时(甚至使用包含的SolrUpdateTest和所有超类),我得到以下错误:
java.lang.NoSuchMethodError:org.eclipse.jetty.server.Request.getDispatcherType()Lorg/eclipse/jetty/server/DispatcherType当我在单元测试中休眠线程并尝试打开SolrWeb控制台时,它也会触发相同的错误。有什么想法吗?再次感谢。我的错误来自maven jetty依赖性问题。谢谢你的回答。这正是我想要的
@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();
    }
}