为单元测试启动嵌入式Cassandra实例

时间:2017-05-19 01:00:52

标签: unit-testing testing cassandra

我需要启动一个嵌入式cassandra实例,通过单元测试在Cassandra键空间上执行一些操作。编程语言是Java。启动嵌入式cassandra的选项有哪些?

我使用了mojo maven插件,但是在使用以下命令启动实例后,我没有看到cassandra实例在localhost上的默认端口9042处启动。 插件:http://www.mojohaus.org/cassandra-maven-plugin/usage.html 命令开始:mvn cassandra:run -Dcassandra.nativeTransportPort = 9042

在使用方面是否缺少某些东西,还是需要使用不同的东西?

由于 此Jyothi

4 个答案:

答案 0 :(得分:2)

这取决于您要测试的内容。 Cassandra Maven插件(我是其中的原始作者之一)和Cassandra Unit都做了非常相似的事情,因为它们启动了Cassandra的JVM实例。

如果您只想在集成测试中做一些CRUD工作,那么此方法就很好用,但是如果您要面对各种故障情况(尤其是针对多个数据中心)测试一致性级别故障和重试之类的情况,则实际上并没有帮助。此时,Cassandra只是一头野兽,因此这意味着您需要很多的内存来运行测试。

要真正验证上述情况,我建议使用Simulacron: https://github.com/datastax/simulacron/blob/master/doc/java_api/README.md

和示例集成: https://github.com/datastax/java-driver/blob/9f0d89799a8a1e4cd1022dd7c43333924c36a648/integration-tests/src/test/java/com/datastax/oss/driver/api/core/ProtocolVersionMixedClusterIT.java

这是驱动程序团队用来测试行为方案的方法,尽管他们仍然依赖CCM测试桥(也是一个选择)来解决很多障碍和问题。对于这两种方法,都应该使用它在该项目中进入Maven的方式作为最佳实践的示例:

https://github.com/datastax/java-driver/blob/3.x/pom.xml#L749-L816

和配置文件切换,例如: https://github.com/datastax/java-driver/blob/3.x/pom.xml#L925-L947

并使用配置文件: https://github.com/datastax/java-driver/blob/3.x/driver-core/src/test/java/com/datastax/driver/core/PreparedStatementTest.java#L146

要真正动手,我建议下拉驱动程序项目并将其分开,以查看如何将它们组合在一起。最大的好处可能是整个项目对Cassandra代码没有任何依赖性。

答案 1 :(得分:1)

我们使用Cassandra unit进行单元测试。该库提供了有用的帮助程序,允许从代码中轻松启动Embedded Cassandra

EmbeddedCassandraServerHelper.startEmbeddedCassandra();

答案 2 :(得分:0)

您还可以查看https://github.com/nosan/embedded-cassandra/wiki

例如如果您想使用Cassandra开始JUnit4,则可以在一行中完成:

public class CassandraRuleTests {

    @ClassRule
    public static final CassandraRule cassandra = new CassandraRule(CqlScript.classpath("init.cql"));

    @Test
    public void testMe() {

    }

}

Cassandra将作为forked作为单独的过程。如果您使用的是JAVA_HOME 8 9和更高版本,还可以通过javaHome属性将路径设置为java

答案 3 :(得分:0)

您需要向 cassandra-maven-plugin 提供以下配置以启动本机传输端口 (9042)

<startNativeTransport>true</startNativeTransport>

所以你的插件看起来像

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>cassandra-maven-plugin</artifactId>
                <version>3.6</version>
                <configuration>
                    <startNativeTransport>true</startNativeTransport>
                </configuration>
            </plugin>