当前位置: 首页 > 知识库问答 >
问题:

带有嵌入式Cassandra依赖项注入问题的Spring Cassandra单元

鱼渝
2023-03-14

我对嵌入式Cassandra的Spring单元测试有意见。问题是嵌入式Cassandra和我的Cassandra服务器同时启动。如何确保在单元测试期间只启动嵌入式Cassandra。

我正在为Cassandra使用Spring数据。

我有以下Spring配置文件。

cassandra.contactpoints=xxx.yyy.1.42
cassandra.keyspace=dialoguedev

我的上下文文件

    <?xml version='1.0'?>
    <beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cassandra="http://www.springframework.org/schema/data/cassandra"
   xmlns:context="http://www.springframework.org/schema/context"
  xsi:schemaLocation="http://www.springframework.org/schema/cql http://www.springframework.org/schema/cql/spring-cql-1.0.xsd
  http://www.springframework.org/schema/data/cassandra http://www.springframework.org/schema/data/cassandra/spring-cassandra-1.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">

<context:component-scan base-package="com.xxx.cassandra" />
<context:property-placeholder location="classpath:cassandra.properties" />
<cassandra:cluster contact-points="${cassandra.contactpoints}"
        />
 <cassandra:session keyspace-name="${cassandra.keyspace}"
                   schema-action="RECREATE"
        />
<cassandra:mapping />
<cassandra:converter />

<cassandra:template />
<cassandra:repositories base-package="com.xxx.cassandra.repository" />

我的测试用例如下:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(value = {"classpath:cassandrabeans.xml"})
@TestExecutionListeners( {  DependencyInjectionTestExecutionListener.class,    CassandraUnitDependencyInjectionTestExecutionListener.class  })
@EmbeddedCassandra

public class EventLogInsertTest  extends AbstractCassandraIntegrationTest {

@Autowired
private EventLogEventRepository eventLogEventRepository;

@Autowired
private EventLogPersonRepository eventLogPersonRepository;

@Test
public void runAllTableInsertTest()  throws Exception{

}

}

共有2个答案

鲁丰
2023-03-14

OP的解决方案不再适用于最新版本的Spring Boot,因为CassandraUnitDependencyInjectionTestExecutionListener来自cassandra单元Spring,它只适用于JUnit 4,而世界已经转向JUnit 5。

我创建了一个cassandra-unit-Spring库,它启动Cassandra服务器并使端口作为Spring Boot环境属性可用。

薛鹏飞
2023-03-14

通过执行以下操作可以解决此问题

@TestExecutionListeners( {   CassandraUnitDependencyInjectionTestExecutionListener.class,DependencyInjectionTestExecutionListener.class })

请注意,这里的顺序很重要。现在嵌入式Cassandra将在存储库自动连接之前启动。

 类似资料:
  • 然而,Eclipse告诉我“没有bean可以被注入到注入点[JSR-299§5.2.1]”。我做错了什么?你有没有看到我缺少的东西。如有任何帮助,我们将不胜感激。 谢谢!!

  • 供给方组件: 注入方组件: 浏览器中可以正常展示: 但是如果在供给方组件中,更换ElMessage和provide的顺序,如下图: 浏览器中就无法正常渲染,并且控制台报警告: 请问这是什么原因呢? 备注: "element-plus": "^2.3.12" "vue": "^3.3.4"

  • 我在PHP中重构旧的应用程序。 我试图使用Symfony依赖注入组件将服务注入控制器(或其他服务),但我不知道如何实现这一点,因为symphony文档比框架组件更适合使用框架。 我已经有了自己的内核,包含所有服务和控制器的容器(控制器已经注册为服务)。我的控制器从扩展AbstractController。所以我现在唯一能做的就是: 通过

  • 我正在做一个使用依赖注入GoogleGuice框架的项目。 可以将类与singleton作用域绑定在一起,如下所示: 如果类本身是一个真正的单例类: 或者 因此,可以在项目中声明两个单例,第一个由Guice声明,第二个由传统方式声明。 Google Guice还可以使用方法将Interface绑定到特定实例。 因此,在Java中,用以下声明绑定Singleton,而不是绑定Singleton作用域

  • 我有一个这样定义的单例实例: 现在,由于一些变化,这个类必须依赖于几个(3)依赖项。因此,这些依赖项必须在这里注入。 我们如何为这样设计的Singleton类实现依赖注入? 问题是,已经有很多调用方,因此无法使 getInstance 方法来接受依赖关系。 页(page的缩写)我知道使用单例并不总是一种更干净的方式:)(这是现有的代码,我不得不忍受它:) 附注:我正在使用Guice进行依赖注入。

  • 我有一个叫做Container的类: ServiceB依赖于ServiceA: 在我的应用程序中可以有几个容器。现在,有没有什么诀窍可以将这个已经被注入到与ServiceB相同的容器实例中的ServiceA实例注入到ServiceB中呢?