4

Ich möchte meine SpringBoot-Anwendung testen, die Cassandra als CrudRepository verwendet. Ich landete mitSpringBoot: Komponententest mit Cassandra

/* 
* https://github.com/jsevellec/cassandra-unit/wiki/Spring-for-Cassandra-unit 
*/ 
@RunWith(SpringJUnit4ClassRunner.class) 
@ComponentScan 
@ContextConfiguration(value = { "classpath:/default-context.xml" }) 
@TestExecutionListeners({ CassandraUnitTestExecutionListener.class }) 
@CassandraDataSet(value = { "setupTables.cql" }, keyspace = "keyspaceToCreate") 
@CassandraUnit 
public class ApplicationTests { 

    @Autowired 
    MyCassandraRepository repo; 

    @Test 
    public void contextLoads() { 

     System.out.println(repo.findAll()); 

    } 

} 

mit

<dependency> 
     <groupId>org.cassandraunit</groupId> 
     <artifactId>cassandra-unit-spring</artifactId> 
     <version>3.0.0.1</version> 
     <scope>test</scope> 
    </dependency> 

und

CREATE TABLE MY_CASSANDRA_ENTRY (
    MY_CASS_STRING varchar PRIMARY KEY 
) 

Dies führt zu

com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: localhost/127.0.0.1:9142 (com.datastax.driver.core.exceptions.InvalidQueryException: unconfigured table schema_keyspaces)) 

Wenn ich eine ältere Version von cassandra-unit-Feder verwenden

Es endet mit einer NullPointerException, weil der Wert Repo nicht injiziert wird.

Quellen https://github.com/StephanPraetsch/spring.boot.cassandra.unit.test

Antwort

1

nehme ich an Version 3.x von cassandra-unit-Feder ist für mich unvereinbar. Besser 2.x.

Mit 2.x gibt es ein Fehlerprotokoll

15:10:23.366 [pool-1-thread-1] ERROR org.apache.cassandra.service.CassandraDaemon - cassandra.jmx.local.port missing from cassandra-env.sh, unable to start local JMX service.null 
3

CassandraUnit beginnt am Hafen 9142. Spring Boot ist standardmäßig auf Port 9042. Sie müssen den Port und den Namen des Schlüsselbereichs festlegen, damit der Cassandra-Treiber die richtigen Verbindungsdetails abrufen kann.

Sie müssen zwei Dinge in Ihrem Test ändern:

  1. verwenden Bitte @SpringBootTest statt @EnableAutoConfiguration. Dies ermöglicht einige andere Dinge wie die Unterstützung von Konfigurationseigenschaften, die Sie in Schritt 2 benötigen.

  2. Erstellen Sie src/test/resources/application.properties, und legen Sie den Port- und Schlüsselbereichsnamen fest.

spring.data.cassandra.port=9142 
spring.data.cassandra.keyspace-name=keyspaceToCreate 

Dies wird den richtigen Port und Schlüsselraum konfigurieren.

Alternativ können Sie Eigenschaften festlegen

@SpringBootTest({"spring.data.cassandra.port=9142", 
       "spring.data.cassandra.keyspace-name=keyspaceToCreate"}) 
0
@RunWith(SpringJUnit4ClassRunner.class) 
@SpringBootTest({ "spring.data.cassandra.port=9142", 
     "spring.data.cassandra.keyspace-name=keyspaceToCreate" }) 
@EnableAutoConfiguration 
@ComponentScan 
@ContextConfiguration 
@TestExecutionListeners({ CassandraUnitDependencyInjectionTestExecutionListener.class, 
     DependencyInjectionTestExecutionListener.class }) 
@CassandraDataSet(value = { "setupTables.cql" }, keyspace = "keyspaceToCreate") 
@CassandraUnit 
public class ApplicationTests { 

    @Autowired 
    MyCassandraRepository repo; 

    @Test 
    public void contextLoads() { 

     System.out.println(repo.findAll()); 

    } 

} 

und

<dependency> 
     <groupId>org.cassandraunit</groupId> 
     <artifactId>cassandra-unit-spring</artifactId> 
     <version>2.1.9.2</version> 
     <scope>test</scope> 
    </dependency> 

Werke verwenden.

Aber wenn Upgrade auf

<dependency> 
     <groupId>org.cassandraunit</groupId> 
     <artifactId>cassandra-unit-spring</artifactId> 
     <version>3.0.0.1</version> 
     <scope>test</scope> 
    </dependency> 

wieder erhalte ich die Fehler

com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: localhost/127.0.0.1:9142 (com.datastax.driver.core.exceptions.InvalidQueryException: unconfigured table schema_keyspaces))