4

Я бы хотел протестировать приложение SpringBoot, которое использует cassandra как CrudRepository. Я закончил сSpringBoot: Unit Test с 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()); 

    } 

} 

с

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

и

CREATE TABLE MY_CASSANDRA_ENTRY (
    MY_CASS_STRING varchar PRIMARY KEY 
) 

Это приводит к

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)) 

Если я использую старую версию Кассандры блок-пружинный

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

заканчивается исключением NullPointerException, поскольку значение repo не вводится.

Источники https://github.com/StephanPraetsch/spring.boot.cassandra.unit.test

ответ

1

Я полагаю версии 3.x Кассандры-блок-весна несовместимую для меня. Лучше 2.x.

С 2.x есть журнал ошибок

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 начинается порт 9142. Spring Boot по умолчанию - порт 9042. Вам нужно установить порт и имя ключа, чтобы драйвер Cassandra мог получить правильные сведения о подключении.

Вам нужно изменить две вещи в тесте:

  1. Пожалуйста, используйте @SpringBootTest вместо @EnableAutoConfiguration. Это позволяет использовать пару других функций, таких как поддержка свойств конфигурации, которые вам понадобятся на этапе 2.

  2. Создайте src/test/resources/application.properties и задайте имя порта и ключей.

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

Это настроит правильный порт и пространство ключей.

В качестве альтернативы, можно задать свойства, используя

@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()); 

    } 

} 

и

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

работы.

Но если обновление до

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

снова я получаю ошибку

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))