我们有一个用Spring3编写的大型应用程序。我需要编写一些服务的JUnit测试检查行为。它不是一个单元,而是一个系统的一部分。有一些服务和存储库在现场协同工作-
我的问题是。在这种情况下,如何管理配置和 bean?我需要使用应用程序配置中定义的 bean,并且在测试中仅使用持久性重新定义 bean 以使用嵌入式数据库。所以我需要使用 src 中的 bean,因为它们是定义的,并且只覆盖一些引起麻烦的 bean(持久性 bean、使用 webservices 的 bean,...)在测试包中,我使用 hsql 的数据源制作了 Config 类来定义持久性的 bean。但我不知道接下来会发生什么。我试图用以下方法注释测试配置类:
@Configuration
@EnableAspectJAutoProxy
@EnableTransactionManagement(mode = AdviceMode.ASPECTJ, proxyTargetClass = true)
@ComponentScan(basePackages = "com.example.our.app")
public class MyTestConfig implements TransactionManagementConfigurer {
扫描整个应用程序并使用 src 文件夹中的 bean 配置。但这也会从导致问题的其他测试中获取配置。这整个策略好吗?现在怎么办 - 使用 excludeFilters 删除其他测试配置?还是这个策略很糟糕?
谢谢
您还可以使用其他导入进行覆盖
<beans>
<import resource="classpath*:applocationContext.xml" />
<bean id="dataSourceFactory" class=com.demo.MyNewClass/>
</beans>
如果你在课堂上
this.applicationContext.getBean("dataSourceFactory");
检索类,您将看到新类的实例
进一步的
<bean id="dataSourceFactory" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
因此,您可以通过不同的方式覆盖默认行为
您可以使用@ContextHi
为了让它适合您的用例,您必须创建一个基本上下文来扫描您的应用程序以查找Spring bean:
@Configuration
@ComponentScan({"com.example.our.app"})
public class MyTestConfig implements TransactionManagementConfigurer {
然后创建一个利用这个上下文的基类并命名它——这不能用于命名上下文!:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextHierarchy( {
@ContextConfiguration(name="testContext", classes = MyTestConfig.class),
})
public class BaseTest {
最后编写一个单元测试,扩展基类并定义同名的新上下文,以使用特定于测试的配置覆盖单个bean:
@ContextHierarchy(@ContextConfiguration(name="testContext", classes = OneUnitTest.Config.class))
public class OneUnitTest extends AggroBaseTest {
@Configuration
static class Config {
..
}
我认为这里最好的使用方式是Spring配置文件。现在点击此处,使用H2进行剖面测试。
我已经编写了许多通过RESTAPI调用进行通信的服务。这些服务可以配置为使用HTTP或HTTPS。任何给定的客户端都具有定义到服务器的连接的安全配置。“默认”配置属性由应用程序中的值设置。yml在这一点上效果很好。 然而,我逐渐意识到,这在更现实的情况下并不适用。问题是,我试图设置特定的参数,例如启动客户端时的服务器主机/端口,而我设置的值被忽略。 例如: 服务A(客户端)将出于某种目的与服务B(
我试图将一个应用程序从spring-boot1迁移到Spring-Boot2,但是我在spring-boot部分遇到了很多困难: 我有这个日志: 上下文初始化期间遇到异常-取消刷新尝试:org.springframework.beans.factory.BeanCreationException:创建名为“org.springframework.boot.autocigure.liquibase.
然后我们有这样的服务: 我的第一个bean是由@repository注释创建的,另一个bean是在Spring配置类中声明的: 如果我运行我的应用程序,SomeServiceImpl中的属性someDaoAnotherDataSource没有在配置类中声明我的bean,而是用注释存储库声明了bean。
我使用的是Spring4.3.x。 我看过很多相关的帖子,但没有一篇给我答案。如有任何帮助,我们将不胜感激。
我是新的stackoverflow,但阅读吨的帖子在这里和现在stuck.myapplication.properties阅读,但配置hikaricp的部分被忽略/没有影响。 我读了https://www.javadevjournal.com/spring-boot/spring-boot-hikari/,在那里遵循了这些步骤,仍然取得了任何成功。 波姆。xml 应用属性 黑名单申请。课程: 配置
为了能够测试应用程序的某些方面,我创建了这个测试设置。因为我需要的自定义实现,所以无法使用经典的注释来完成,而是使用了以下initialisazion: 所敬畏的SaveMetestApplication: 是一个将某些配置和必需的bean结合在一起的配置: 然后是引用的,其中有两个bean是自动连线的: 自动连线的两个bean是在导入的中定义的。当我使用启动测试时,我得到了实际找到的bean的日