2009-06-01 9 views
17

Je suis en train de coder des tests pour mon application solr-indexer. Après avoir testé les meilleures pratiques, je veux écrire du code auto-dépendant, en chargeant simplement les codes schema.xml et solrconfig.xml et en créant une arborescence de données temporaire pour les tests de recherche d'indexation. Comme l'application est la plus écrite en java, j'ai affaire à la bibliothèque SolrJ, mais j'ai des problèmes (enfin, je suis perdu dans l'univers des corecontainers-coredescriptor-coreconfig-solrcore ...) ici du code pour créer un serveur embarqué qui charge la config et écrit aussi dans un répertoire de données paramétré?Test de Solr via Embedded Server

+3

SOYEZ PRUDENT !!!! Seul JUnit 4.7 soutient les approches décrites ci-dessous, je crois. Il existe une sorte d'erreur d'invocation dynamique setup() qui se produit dans les nouvelles versions de JUnit avec le test Solr Base. – jayunit100

+0

J'ai essayé de répondre à une question similaire ici: http://stackoverflow.com/a/23102896/1410035 –

Répondre

10

Vous pouvez commencer par SolrExampleTests qui s'étend SolrExampleTestBase qui s'étend AbstractSolrTestCase.

Aussi ce SampleTest.

Jetez également un coup d'œil aux filets this et this.

+1

SolrExampleTests: http://svn.apache.org/repos/asf/lucene/solr/tags/release- 1.4.0/src/test/org/apache/solr/client/solrj/SolrExampleTests.java – High6

+2

Cela fait référence aux versions 1.4 de solr. Si vous avez besoin des versions 3.5 de ces classes, il existe un artefact de framework de test solr sur maven central. http://mvnrepository.com/artifact/org.apache.solr/solr-test-framework – unscene

7

Ceci est un exemple pour un cas de test simple. Solr est le répertoire contenant vos fichiers de configuration 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")); 
    } 
} 

Voir cette blogpost pour plus d'infos: Solr Integration Tests

+1

Je voudrais mettre en garde toutes les réponses avec une nouvelle réponse: qui est - si vous utilisez junit 4.7, vous pouvez utiliser cette méthodologie. Si vous utilisez un JUnit plus élevé, pour l'instant, vous ne pouvez pas. – jayunit100

5

D'abord, vous devez définir votre Solr Home Directory qui contient le dossier solr.xml et conf contenant solrconfig. xml, schema.xml etc.

Ensuite, vous pouvez utiliser ce code simple et basique pour 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()); 
} 

J'espère que cela aide.