我有一个play/scala应用程序,并使用cassandra数据库。我读过关于embedded-cassandra的文章,并试图使用它。我的应用程序不使用像junit这样的测试框架(如果可能的话,我宁愿不使用它们来避免)。
到目前为止,我已经创建了一个工厂和一个cqlstatement。但我不知道怎么执行这条语句。提到wiki,它指的是TestCassandra,但是我的IDE找不到这个类。我需要使用TestNG还是Junit4?
class UsersRepositorySpecs extends PlaySpec /*with BeforeAndAfterAll with BeforeAndAfterEach with OneAppPerSuiteWithComponents*/{
"UsersRepository Specs" should {
"create keyspace" in {
val factory = new LocalCassandraFactory
println(s"factory is ${factory}")
factory.setVersion(("3.11.1"))
val statement = new CqlStatements(
"""
|CREATE KEYSPACE myspace
| WITH REPLICATION = {
| 'class' : 'SimpleStrategy',
| 'replication_factor' : 1
| };
""".stripMargin)
val cassandra = factory.create
try {
cassandra.start()
val settings = cassandra.getSettings
println(s"settings are ${settings}")
//HOW DO I EXECUTE THE STATEMENT ?
} finally cassandra.stop()
}
}
}发布于 2019-05-17 08:14:11
您使用的是com.github.nosan:embedded-cassandra-test还是com.github.nosan:embedded-cassandra?你应该用第一个。
libraryDependencies += "com.github.nosan" % "embedded-cassandra-test" % "2.0.1" % Test
com.github.nosan:embedded-cassandra-test模块包含TestCassandra类。
LocalCassandraFactory cassandraFactory = new LocalCassandraFactory();
cassandraFactory.setVersion("3.11.1");
TestCassandra testCassandra = new TestCassandra(cassandraFactory, CqlScript.statements("raw-statements"),
CqlScript.classpath("file scripts"));
try {
testCassandra.start();
//your tests
}
finally {
testCassandra.stop();
}如果TestCassandra类仍然有问题,可以使用以下示例:
LocalCassandraFactory cassandraFactory = new LocalCassandraFactory();
cassandraFactory.setVersion("3.11.1");
Cassandra cassandra = cassandraFactory.create();
try {
cassandra.start();
Settings settings = cassandra.getSettings();
//com.datastax.cassandra:cassandra-driver-core:3.7.1
SocketOptions socketOptions = new SocketOptions();
socketOptions.setConnectTimeoutMillis(30000);
socketOptions.setReadTimeoutMillis(30000);
try (Cluster cluster = Cluster.builder()
.addContactPoints(settings.getAddress())
.withPort(settings.getPort())
.withSocketOptions(socketOptions)
.withoutJMXReporting()
.withoutMetrics()
.build()) {
Session session = cluster.connect();
List<String> statements = CqlScript.classpath("schema.cql").getStatements();
statements.forEach(session::execute);
}
//com.datastax.oss:java-driver-core:4.0.1
DriverConfigLoader driverConfigLoader = DriverConfigLoader.programmaticBuilder()
.withDuration(DefaultDriverOption.REQUEST_TIMEOUT, Duration.ofSeconds(30))
.withDuration(DefaultDriverOption.CONNECTION_INIT_QUERY_TIMEOUT, Duration.ofSeconds(3))
.build();
try (CqlSession cqlSession = CqlSession.builder().addContactPoint(
new InetSocketAddress(settings.getAddress(), settings.getPort()))
.withLocalDatacenter("datacenter1")
.withConfigLoader(driverConfigLoader)
.build()) {
List<String> statements = CqlScript.classpath("schema.cql").getStatements();
statements.forEach(cqlSession::execute);
}
}
finally {
cassandra.stop();
}https://stackoverflow.com/questions/56181569
复制相似问题