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

doinxwow  于 2022-11-05  发布在  Cassandra
关注(0)|答案(4)|浏览(158)

我需要启动一个嵌入式cassandra示例来通过单元测试在一个Cassandra键空间上执行一些操作。编程语言是Java。启动嵌入式cassandra的选项是什么?
我使用了mojo maven插件,但是在使用以下命令启动示例后,我没有看到cassandra示例在localhost上的默认端口9042启动。插件:http://www.mojohaus.org/cassandra-maven-plugin/usage.html要启动的命令:mvn cassandra:运行-德Cassandra。本地运输港口=9042
在用法方面是否缺少了什么,或者我需要使用不同的东西?
谢谢Jyothi

ctehm74n

ctehm74n1#

Cassandra Maven Plugin(我是它的原始作者之一)和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代码没有任何依赖。

swvgeqrz

swvgeqrz2#

我们使用Cassandra unit进行单元测试。这个库提供了有用的助手,并允许非常容易地从代码启动Embedded Cassandra

EmbeddedCassandraServerHelper.startEmbeddedCassandra();
lyr7nygr

lyr7nygr3#

您还可以查看https://github.com/nosan/embedded-cassandra/wiki
例如,如果要使用JUnit4启动Cassandra,可以在一行中执行以下操作:

public class CassandraRuleTests {

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

    @Test
    public void testMe() {

    }

}

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

ztigrdn8

ztigrdn84#

您需要向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>

相关问题