Spring-具有嵌入式 Cassandra 依赖注入问题的 Cassandra 单元
Spring-Cassandra Unit with Embedded Cassandra Dependency Injection Issue
我在使用嵌入式 Cassandra 进行 Spring 单元测试时遇到问题。问题是嵌入式 Cassandra 和我的 Cassandra 服务器同时启动。如何确保在单元测试期间只有嵌入式 Cassandra 启动。
我正在使用 spring-Cassandra 数据。
我有以下 Spring 配置文件。
cassandra.contactpoints=xxx.yyy.1.42
cassandra.keyspace=dialoguedev
我的上下文文件
<?xml version='1.0'?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cassandra="http://www.springframework.org/schema/data/cassandra"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/cql http://www.springframework.org/schema/cql/spring-cql-1.0.xsd
http://www.springframework.org/schema/data/cassandra http://www.springframework.org/schema/data/cassandra/spring-cassandra-1.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">
<context:component-scan base-package="com.xxx.cassandra" />
<context:property-placeholder location="classpath:cassandra.properties" />
<cassandra:cluster contact-points="${cassandra.contactpoints}"
/>
<cassandra:session keyspace-name="${cassandra.keyspace}"
schema-action="RECREATE"
/>
<cassandra:mapping />
<cassandra:converter />
<cassandra:template />
<cassandra:repositories base-package="com.xxx.cassandra.repository" />
我的测试用例如下:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(value = {"classpath:cassandrabeans.xml"})
@TestExecutionListeners( { DependencyInjectionTestExecutionListener.class, CassandraUnitDependencyInjectionTestExecutionListener.class })
@EmbeddedCassandra
public class EventLogInsertTest extends AbstractCassandraIntegrationTest {
@Autowired
private EventLogEventRepository eventLogEventRepository;
@Autowired
private EventLogPersonRepository eventLogPersonRepository;
@Test
public void runAllTableInsertTest() throws Exception{
}
}
问题已通过执行以下操作得到解决
@TestExecutionListeners( { CassandraUnitDependencyInjectionTestExecutionListener.class,DependencyInjectionTestExecutionListener.class })
请注意这里的顺序很重要。现在,嵌入式 Cassandra 将在存储库自动连接之前启动。
OP 的解决方案不再适用于最新版本的 Spring Boot,因为 CassandraUnitDependencyInjectionTestExecutionListener
来自仅适用于 JUnit 4 的 cassandra-unit-spring,并且世界已经转移到JUnit 5.
我创建了一个 cassandra-unit-spring 库来启动 Cassandra 服务器并使端口可用作 Spring 引导环境属性。
我在使用嵌入式 Cassandra 进行 Spring 单元测试时遇到问题。问题是嵌入式 Cassandra 和我的 Cassandra 服务器同时启动。如何确保在单元测试期间只有嵌入式 Cassandra 启动。
我正在使用 spring-Cassandra 数据。
我有以下 Spring 配置文件。
cassandra.contactpoints=xxx.yyy.1.42
cassandra.keyspace=dialoguedev
我的上下文文件
<?xml version='1.0'?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cassandra="http://www.springframework.org/schema/data/cassandra"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/cql http://www.springframework.org/schema/cql/spring-cql-1.0.xsd
http://www.springframework.org/schema/data/cassandra http://www.springframework.org/schema/data/cassandra/spring-cassandra-1.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">
<context:component-scan base-package="com.xxx.cassandra" />
<context:property-placeholder location="classpath:cassandra.properties" />
<cassandra:cluster contact-points="${cassandra.contactpoints}"
/>
<cassandra:session keyspace-name="${cassandra.keyspace}"
schema-action="RECREATE"
/>
<cassandra:mapping />
<cassandra:converter />
<cassandra:template />
<cassandra:repositories base-package="com.xxx.cassandra.repository" />
我的测试用例如下:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(value = {"classpath:cassandrabeans.xml"})
@TestExecutionListeners( { DependencyInjectionTestExecutionListener.class, CassandraUnitDependencyInjectionTestExecutionListener.class })
@EmbeddedCassandra
public class EventLogInsertTest extends AbstractCassandraIntegrationTest {
@Autowired
private EventLogEventRepository eventLogEventRepository;
@Autowired
private EventLogPersonRepository eventLogPersonRepository;
@Test
public void runAllTableInsertTest() throws Exception{
}
}
问题已通过执行以下操作得到解决
@TestExecutionListeners( { CassandraUnitDependencyInjectionTestExecutionListener.class,DependencyInjectionTestExecutionListener.class })
请注意这里的顺序很重要。现在,嵌入式 Cassandra 将在存储库自动连接之前启动。
OP 的解决方案不再适用于最新版本的 Spring Boot,因为 CassandraUnitDependencyInjectionTestExecutionListener
来自仅适用于 JUnit 4 的 cassandra-unit-spring,并且世界已经转移到JUnit 5.
我创建了一个 cassandra-unit-spring 库来启动 Cassandra 服务器并使端口可用作 Spring 引导环境属性。