what unit test proper practices how for dotnet best unit-testing solr solrj

unit testing - unit - Probando Solr a través del Servidor Embebido



unit testing xunit c# (3)

Estoy codificando algunas pruebas para mi aplicación solr-indexer. Siguiendo las mejores prácticas de prueba, quiero escribir código auto-dependiente, simplemente cargando schema.xml y solrconfig.xml y creando un árbol de datos temporal para las pruebas de búsqueda de índices. Como la aplicación está más escrita en java, estoy tratando con la biblioteca SolrJ, pero tengo problemas (bueno, estoy perdido en el universo de los corecontainers-coredescriptor-coreconfig-solrcore ...) Cualquiera puede colocar aquí algunos ¿Código para crear un servidor incorporado que carga la configuración y también escribe en un directorio de datos pegado con parámetros?


Este es un ejemplo para un caso de prueba simple. solr es el directorio que contiene sus archivos de configuración de 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")); } }

Ver este blogpost para más información: Pruebas de integración de Solr


Primero debe configurar su directorio de inicio de Solr que contiene solr.xml y la carpeta conf que contiene solrconfig.xml, schema.xml, etc.

Después de eso puedes usar este código simple y básico para 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()); }

Espero que esto ayude.