SpringBoot: модульный тест с Cassandra

Я хотел бы протестировать свое приложение SpringBoot, которое использует cassandra в качестве CrudRepository. я закончил с

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

Если я использую более старую версию cassandra-unit-spring

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

он заканчивается NullPointerException, потому что репозиторий значений не вводится.

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


person Stephan Prätsch    schedule 02.08.2016    source источник
comment
Версии весенней загрузки и весенних данных cassandra, которые вы используете? в некоторых версиях возникают конфликты относительно некоторых сетевых зависимостей. если вы используете gradle или maven, может помочь просмотр деревьев зависимостей   -  person NotMyFaultSir    schedule 16.08.2018


Ответы (1)


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"})
person mp911de    schedule 02.08.2016