2014-06-19 33 views
1

我正在写骆驼单元测试。我接口的一项服务是Solr。经过mock测试后,我想编写测试来调出本地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的Solr和码头。有关如何编程站起来关闭solr实例的任何建议? (因为我用骆驼单元测试,我不喜欢延长RestTestBase)

回答

1

看到骆驼,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(); 
    } 
} 
+0

感谢您的帮助。这正是我正在寻找的。但是,我遇到了一个问题。当我尝试与solr实例进行交互时(即使使用随同所有超类一起提供的SolrUpdateTest),我得到以下错误: 'java.lang.NoSuchMethodError:org.eclipse.jetty.server.Request.getDispatcherType()Lorg/eclipse/jetty/server/DispatcherType;' 当我在单元测试中休眠线程并尝试打开Solr Web控制台时,它也会触发相同的错误。有任何想法吗? 再次感谢 – user1483714

+0

我的错误来自maven jetty依赖性问题。谢谢你的回答。正是我所寻找的 – user1483714

+0

没问题...祝你好运 –