如何在没有任何测试框架的情况下使用 embedded-cassandra

how to use embedded-cassandra without any test framework

我有一个 play/scala 应用程序并使用 cassandra 数据库。我阅读了 embedded-cassandra 并正在尝试使用它。我的应用程序不使用任何测试框架,如 junit(如果可能,我宁愿不使用它们以避免)。

到目前为止,我已经创建了一个工厂和一个cqlstatement。但是我不知道如何执行该语句。参考 wiki,它指的是 TestCassandra 但我的 IDE 找不到这个 class。我需要使用 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()

    }
  }

}

您使用的是 com.github.nosan:embedded-cassandra-testcom.github.nosan:embedded-cassandra 哪个依赖项?你应该使用第一个。

libraryDependencies += "com.github.nosan" % "embedded-cassandra-test" % "2.0.1" % Test

com.github.nosan:embedded-cassandra-test 模块包含 TestCassandra class.

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 class 有疑问,您可以使用以下示例:


        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();
        }