java - Spring 启动: Unit Test with Cassandra

标签 java unit-testing spring-boot cassandra spring-data-cassandra

我想测试使用 cassandra 作为 CrudRepository 的 SpringBoot 应用程序。我结束了

/*
 * 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 结束,因为没有注入(inject)值 repo。

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

最佳答案

CassandraUnit 在端口 9142 上启动。 Spring Boot 默认使用端口 9042。您需要设置端口和 key 空间名称,以便 Cassandra 驱动程序可以获取正确的连接详细信息。

您需要在测试中更改两件事:

  1. 请使用 @SpringBootTest 而不是 @EnableAutoConfiguration。这会启用其他一些功能,例如您在第 2 步中需要的配置属性支持。

  2. 创建 src/test/resources/application.properties 并设置端口和键空间名称。

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

这将配置正确的端口和 key 空间。

或者,您可以使用

指定属性
@SpringBootTest({"spring.data.cassandra.port=9142",
                 "spring.data.cassandra.keyspace-name=keyspaceToCreate"})

关于java - Spring 启动: Unit Test with Cassandra,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38720737/

相关文章:

objective-c - 是否可以将 XCTAsserts 放入循环中?

java - Spring Boot with websphere 8.5.5 - UOWManager 事务处理失败

java - 在运行时创建的引用对象

java - 在 Java 8 中,如果映射具有重复值,则获取重复值异常

java - 不支持的操作异常 : WebView is not allowed in privileged processes

Java Spring Boot - 将 Actuator Health Endpoint 的端口更改为自定义端口

java - Eclipse Tomcat 实例试图从不在源代码中的包初始化 spring bean

java - Bukkit 前缀和后缀

java - Spring事务管理测试

php - 我如何构建我的类以便更轻松地进行单元测试?