【问题标题】:Testing Solr via Embedded Server通过嵌入式服务器测试 Solr
【发布时间】:2010-10-30 12:28:15
【问题描述】:

我正在为我的 solr-indexer 应用程序编写一些测试。遵循测试最佳实践,我想编写独立的代码,只需加载schema.xmlsolrconfig.xml 并为索引搜索测试创建一个临时数据树。 由于应用程序大部分是用 java 编写的,我正在处理 SolrJ 库,但我遇到了问题(好吧,我迷失在 corecontainers-coredescriptor-coreconfig-solrcore 的世界中......) 任何人都可以在这里放置一些代码来创建一个嵌入式服务器,该服务器加载配置并写入参数传递的数据目录?

【问题讨论】:

  • 小心!!!!我相信只有 JUnit 4.7 支持下面列出的方法。在具有 Solr Base 测试的较新版本的 JUnit 中会出现某种 setup() 动态调用错误。
  • 我尝试在这里回答一个类似的问题:stackoverflow.com/a/23102896/1410035

标签: unit-testing solr solrj


【解决方案1】:

首先您需要设置包含 solr.xml 的 Solr 主目录和包含 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());
}

我希望这会有所帮助。

【讨论】:

    【解决方案2】:

    您可以从扩展 SolrExampleTestBaseSolrExampleTests 开始,扩展 AbstractSolrTestCase

    还有这个SampleTest

    还可以查看thisthis 线程。

    【讨论】:

    【解决方案3】:

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

    导入 java.io.IOException; 导入 org.apache.solr.client.solrj.embedded.EmbeddedSolrServer; 导入 org.apache.solr.util.AbstractSolrTestCase; 导入 org.apache.solr.client.solrj.SolrQuery; 导入 org.apache.solr.client.solrj.SolrServer; 导入 org.apache.solr.client.solrj.SolrServerException; 导入 org.apache.solr.client.solrj.response.QueryResponse; 导入 org.apache.solr.common.SolrInputDocument; 导入 org.apache.solr.common.params.SolrParams; 导入 org.junit.Before; 导入 org.junit.Test; 导入静态 org.junit.Assert.assertEquals; 公共类 SolrSearchConfigTest 扩展 AbstractSolrTestCase { 私有 SolrServer 服务器; @覆盖 公共字符串 getSchemaFile() { 返回“solr/conf/schema.xml”; } @覆盖 公共字符串 getSolrConfigFile() { 返回“solr/conf/solrconfig.xml”; } @前 @覆盖 公共 void setUp() 抛出异常 { super.setUp(); server = new EmbeddedSolrServer(h.getCoreContainer(), h.getCore().getName()); } @测试 公共无效 testThatNoResultsAreReturned() 抛出 SolrServerException { SolrParams params = new SolrQuery("找不到的文本"); QueryResponse 响应 = server.query(params); assertEquals(0L, response.getResults().getNumFound()); } @测试 公共无效 testThatDocumentIsFound() 抛出 SolrServerException,IOException { SolrInputDocument 文档 = new SolrInputDocument(); document.addField("id", "1"); document.addField("姓名", "我的名字"); server.add(文档); server.commit(); SolrParams 参数 = new SolrQuery("name"); QueryResponse 响应 = server.query(params); assertEquals(1L, response.getResults().getNumFound()); assertEquals("1", response.getResults().get(0).get("id")); } }

    查看这篇博文了解更多信息:Solr Integration Tests

    【讨论】:

    • 我会用一个新的答案警告所有答案:也就是说 - 如果您使用的是 junit 4.7,您可以使用这种方法。如果你现在使用更高的 JUnit,你不能。
    猜你喜欢
    • 2011-09-30
    • 2018-09-27
    • 2010-10-07
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多