在Spring Boot中使用嵌入式Cassandra进行单元测试

时间:2018-11-27 15:40:15

标签: spring-boot testing junit cassandra

我正在尝试测试Spring Boot应用程序,其中包括保存到cassandra DB中。 对于单元测试,我使用了EmbeddedCassandra。

这些是依赖项。

@RunWith(SpringRunner.class)
@WebMvcTest(value = MyController.class)
@Import(value = {MyDao.class})
@ContextConfiguration
@TestExecutionListeners(listeners = {
        CassandraUnitDependencyInjectionTestExecutionListener.class,
        CassandraUnitTestExecutionListener.class,
        ServletTestExecutionListener.class,
        DependencyInjectionTestExecutionListener.class,
        DirtiesContextTestExecutionListener.class}
)
@EmbeddedCassandra(timeout = 60000)
@CassandraDataSet(keyspace = "test", value = {"test.cql"})

这些是我使用的注释

var myObj = {
  myKey: 0
}
var obj1 = {
  myKey: 0
}
var obj2 = {
  myKey: 0
}
var array = [{
  obj: obj1,
  key: 'myKey1',
  value: 1
}, {
  obj: obj2,
  key: 'myKey2',
  value: 2
}]

function changeRule(obj, key, value, array) {
  if (array! == undefined && Array.isArray(array)) {
    // rest of the code to change the object properties
    return;
  }
  obj[key] = value
},

changeRule(myObj, 'myKey', 1, array)

但是在单元测试中保存的值将填充原始cassandra db。 谁能帮助我解决这个问题?

1 个答案:

答案 0 :(得分:0)

Cassandra单位使用: native_transport_port:9142,但是Spring Boot需要9042端口,因此您应该在配置中更改端口或使用cassandra.yaml文件。 作为替代方案,您可以看一下以下内容:

https://github.com/nosan/embedded-cassandra/blob/master/README.adoc#spring-boot

它还提供@Cql批注,以在每次测试之前或之后执行cql脚本。

希望,对您有用。