通过嵌入式服务器测试Solr

Lic*_*ici 17 solr unit-testing solrj

我正在为我的solr-indexer应用程序编写一些测试.在测试最佳实践之后,我想编写代码自我依赖,只需加载schema.xmlsolrconfig.xml为索引搜索测试创建临时数据树.由于应用程序大部分是用java编写的,我正在处理SolrJ库,但是我遇到了问题(好吧,我在corecontainers的核心容器中丢失了 - coredescriptor-coreconfig-solrcore ...)任何人都可以放在这里用于创建加载配置的嵌入式服务器以及写入参数化数据目录的代码?

Mau*_*fer 12

您可以从SolrExampleTests开始,它扩展了扩展AbstractSolrTestCase的SolrExampleTestBase.

也是这个SampleTest.

另外看看这个这个线程.

  • 这是指solr的1.4版本.如果您需要这些类的3.5版本,则在maven central上有一个solr-test-framework工件.http://mvnrepository.com/artifact/org.apache.solr/solr-test-framework (2认同)

小智 7

这是一个简单测试用例的例子.solr是包含solr配置文件的目录:

import java.io.IOException;
import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer;
import org.apache.solr.util.AbstractSolrTestCase;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.SolrParams;
import org.junit.Before;
import org.junit.Test;

import static org.junit.Assert.assertEquals;

public class SolrSearchConfigTest extends AbstractSolrTestCase {

    private SolrServer server;

    @Override
    public String getSchemaFile() {
        return "solr/conf/schema.xml";
    }

    @Override
    public String getSolrConfigFile() {
        return "solr/conf/solrconfig.xml";
    }

    @Before
    @Override
    public void setUp() throws Exception {
        super.setUp();
        server = new EmbeddedSolrServer(h.getCoreContainer(), h.getCore().getName());
    }

    @Test
    public void testThatNoResultsAreReturned() throws SolrServerException {
        SolrParams params = new SolrQuery("text that is not found");
        QueryResponse response = server.query(params);
        assertEquals(0L, response.getResults().getNumFound());
    }

    @Test
    public void testThatDocumentIsFound() throws SolrServerException, IOException {
        SolrInputDocument document = new SolrInputDocument();
        document.addField("id", "1");
        document.addField("name", "my name");

        server.add(document);
        server.commit();

        SolrParams params = new SolrQuery("name");
        QueryResponse response = server.query(params);
        assertEquals(1L, response.getResults().getNumFound());
        assertEquals("1", response.getResults().get(0).get("id"));
    }
}

有关详细信息,请参阅此博客帖子:Solr集成测试

  • 我会用一个新答案告诫所有答案:这是 - 如果你使用的是junit 4.7,你可以使用这种方法.如果你使用更高的JUnit,现在,你不能. (2认同)

Maw*_*wia 5

首先,您需要设置Solr主目录,其中包含solr.xml和包含solrconfig.xml,schema.xml等的conf文件夹.

之后,您可以使用Solrj的这个简单和基本代码.

File solrHome = new File("Your/Solr/Home/Dir/");
File configFile = new File(solrHome, "solr.xml");
CoreContainer coreContainer = new CoreContainer(solrHome.toString(), configFile);
SolrServer solrServer = new EmbeddedSolrServer(coreContainer, "Your-Core-Name-in-solr.xml");
SolrQuery query = new SolrQuery("Your Solr Query");
QueryResponse rsp = solrServer.query(query);
SolrDocumentList docs = rsp.getResults();
Iterator<SolrDocument> i = docs.iterator();
while (i.hasNext()) {
      System.out.println(i.next().toString());
}
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助.