具有嵌入式Cassandra依赖注入问题的Spring-Cassandra单元

时间:2015-03-03 10:05:50

标签: unit-testing cassandra cassandra-2.0 spring-data-cassandra

我遇到使用Embedded Cassandra进行Spring单元测试的问题。问题是Embedded Cassandra和My Cassandra Server都是同时启动的。如何确保在单元测试期间只有Embedded Cassandra Starts。

我正在使用Cassandra的spring-data。

我有以下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{

}

}

2 个答案:

答案 0 :(得分:1)

通过执行以下操作解决了该问题

@TestExecutionListeners( {   CassandraUnitDependencyInjectionTestExecutionListener.class,DependencyInjectionTestExecutionListener.class })

请注意,此处的订单非常重要。现在嵌入式Cassandra将在存储库自动连接之前启动。

答案 1 :(得分:0)

OP提供的解决方案不再适用于最新版本的Spring Boot,因为CassandraUnitDependencyInjectionTestExecutionListener来自cassandra-unit-spring,仅适用于JUnit 4,并且世界已经迁移到JUnit 5。

我创建了一个cassandra-unit-spring库,该库启动Cassandra服务器并使端口可用作Spring Boot环境属性。