You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何验证embedded-cassandra脚本执行结果及排查启动问题

解决Embedded Cassandra单元测试的问题

一、修复Embedded Cassandra未正确启动的问题

你提到没把cassandraFactory传入TestCassandra,这确实是核心问题——直接new TestCassandra()并不会使用你配置好的Cassandra工厂实例,导致Cassandra根本没按你设定的版本和规则启动。

正确的做法是通过cassandraFactory来构建TestCassandra实例,而不是直接调用无参构造。根据embedded-cassandra的标准API,你可以这样调整:

val cassandraFactory = factory.create()
val testCassandra = TestCassandra.builder()
  .cassandra(cassandraFactory)
  .build()

这样就能确保使用你指定了版本(3.11.1)的Cassandra实例,彻底解决启动异常的问题。

二、消除认证警告

这条警告的根源是:你的Datastax驱动配置了PlainTextAuthProvider,但Embedded Cassandra默认没有启用认证机制,驱动发起连接时没收到预期的认证挑战,所以抛出了警告。

有两种简单的解决方式:

  • 方式1:禁用驱动的认证配置
    在创建Cassandra连接时,显式去掉认证提供者的配置:
    val cluster = Cluster.builder()
      .addContactPoints("127.0.0.1")
      .withPort(9042)
      .withoutAuthProvider() // 明确禁用认证
      .build()
    
  • 方式2:给Embedded Cassandra开启认证
    如果你的测试需要模拟生产环境的认证场景,可以通过配置启用Cassandra的密码认证:
    factory.setConfigProperties(Map(
      "authenticator" -> "PasswordAuthenticator",
      "authorizer" -> "CassandraAuthorizer"
    ))
    
    同时驱动侧配置默认的用户名密码(默认是cassandra/cassandra)即可。

三、获取并打印脚本执行结果

executeScripts方法通常不会主动返回执行结果,你可以通过获取Cassandra的Session手动执行语句,然后处理ResultSet来确认执行状态:

修改测试代码,在启动TestCassandra后主动获取Session执行语句并打印:

try {
  testCassandra.start()
  // 获取Cassandra会话
  val session = testCassandra.getSession()
  
  // 执行创建Keyspace的语句并提示结果
  session.execute(statement1)
  println("✅ Keyspace 'myspace' 创建成功")
  
  // 执行查询语句并打印所有结果
  val resultSet = session.execute(statement2)
  println("\n📋 查询到的Keyspace列表:")
  resultSet.forEach { row =>
    println(s"- ${row.getString("keyspace_name")}")
  }
} finally {
  testCassandra.stop()
}

这样你就能在控制台清晰看到脚本是否执行成功,以及查询到的具体数据。

四、解决TestCassandra参数过多的错误

你直接传入cassandraFactory和cqlStatements时触发参数过多错误,是因为TestCassandra的构造函数不支持这种传参方式。正确的做法是用Builder模式逐步配置:

val testCassandra = TestCassandra.builder()
  .cassandra(cassandraFactory)
  .scripts(cqlStatements) // 如果API支持直接传入脚本集合的话
  .build()

如果scripts方法不存在,也可以像第三部分那样,启动后手动通过Session执行脚本,效果是一样的。


内容的提问来源于stack exchange,提问作者Manu Chadha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:36:05