我需要启动一个嵌入式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
答案 0 :(得分:2)
这取决于您要测试的内容。 Cassandra Maven插件(我是其中的原始作者之一)和Cassandra Unit都做了非常相似的事情,因为它们启动了Cassandra的JVM实例。
如果您只想在集成测试中做一些CRUD工作,那么此方法就很好用,但是如果您要面对各种故障情况(尤其是针对多个数据中心)测试一致性级别故障和重试之类的情况,则实际上并没有帮助。此时,Cassandra只是一头野兽,因此这意味着您需要很多的内存来运行测试。
要真正验证上述情况,我建议使用Simulacron: https://github.com/datastax/simulacron/blob/master/doc/java_api/README.md
这是驱动程序团队用来测试行为方案的方法,尽管他们仍然依赖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
要真正动手,我建议下拉驱动程序项目并将其分开,以查看如何将它们组合在一起。最大的好处可能是整个项目对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>