我对嵌入式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{
}
}
OP的解决方案不再适用于最新版本的Spring Boot,因为CassandraUnitDependencyInjectionTestExecutionListener来自cassandra单元Spring,它只适用于JUnit 4,而世界已经转向JUnit 5。
我创建了一个cassandra-unit-Spring库,它启动Cassandra服务器并使端口作为Spring Boot环境属性可用。
通过执行以下操作可以解决此问题
@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中呢?