我正在从事一个Spring项目,其中单元测试有自己的配置,称为UnitTestConfig,它有几个定义类似于主应用程序文件的bean(几乎是一个副本)。保持结构不变,我正在对主应用程序服务器代码进行一些更改,但是这会在UnitTestConfig中引发错误,因为它没有注入所需的bean。这些bean没有在单元测试中使用,有没有办法阻止UnitTestConfig尝试注入这些bean?这是一个巨大的卡萨卡德效应,因为a注入,B注入,等等,它期待着所有这些豆子。我能告诉Spring配置我不想注入这些bean或将它们设为null吗?
@Configuration
public class UnitTestConfig {
@Inject
private Environment env;
@Bean
public A a() {
return new A();
}
为了不在需要时注入A的字段,我在字段上添加了一个@Lazy,它似乎可以工作,但我希望对此进行的任何修改都在测试配置端,而不是修改主要应用程序代码来修复测试问题。有什么建议吗?
这是大多数应用程序的一个非常常见的问题,随着应用程序的增长,添加具有通用配置的单元测试变得困难。运行单元测试成为一场噩梦,因为您必须处理不必要的上下文加载。
我们最终开始有测试配置文件,以解决加载不必要的bean的问题。并且仅为某些配置文件加载bean。类似这样的东西-
如何在Spring中禁用使用@组件注释创建bean?
但是这可能会产生自己的问题——创建多个配置文件并管理这些配置文件。如果管理配置文件不是问题,这可以帮助您。
或者,我们停止使用公共上下文进行单元测试,开始使用静态测试上下文类隔离测试类,并模拟所有不需要的bean。像这样的-
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader = AnnotationConfigContextLoader.class)
public class SomeJavaClassTest {
@Autowired
private Bean1 bean1;
@Autowired
private Bean2 bean2;
@Autowired
private Bean3 bean3;
@test
public void method1Test() throws Exception {
}
@test
public void method2Test() throws Exception {
}
@Configuration
static class Config {
@Bean
public Bean1 bean1() {
return Mockito.mock(Bean1.class);
}
@Bean
public Bean2 bean2() {
return new SomeJavaClass();
}
@Bean
public Bean3 bean3() {
return Mockito.mock(Bean3.class);
}
@Bean
public PropertySourcesPlaceholderConfigurer properties() throws Exception {
PropertySourcesPlaceholderConfigurer propertyPlaceholder = new PropertySourcesPlaceholderConfigurer();
// setup properties that needs to be injected into the class under test
Properties properties = new Properties();
properties.setProperty("some.required.properties", "");
propertyPlaceholder.setProperties(properties);
return propertyPlaceholder;
}
}
这被称为循环bean依赖。有很多方法可以解决这个问题。在构造函数参数中使用@Lazy注释。而不是构造函数注入器使用setter注入或在application.properties文件中写入spring.main.allow-bean-定义-覆盖=true
我正在运行一个使用TestNG作为测试框架的Spring Boot应用程序。我的测试是这样设置的: 父类,负责设置逻辑并负责所有配置内容: 有多个子测试类。每个on继承父测试类,因此它们共享相同的设置逻辑。 问题是:以前我使用的是注释,这意味着父类的设置方法为每个子测试类运行一次。这是可以的,但等待相同的设置运行多次确实很慢。 所以我想:我将把ParentTestClass中的注释改为!那会解决我
我正在使用spring官方教程中的示例进行实验,并且对此代码有一个依赖关系: https://github.com/spring-guides/gs-async-method/tree/master/complete 如果您查看类上的代码,我有两个问题: 当服务器启动时,如果我在这个类的构造函数中放置一个断点,就像在构造函数中一样,是由spring使用配置的bean提供的。但是,构造函数上没有注释
在不讨论原因的情况下,假设有人想要一个老式的Play Framework web服务,并且不想使用依赖注入,也不想依赖Google的Guice。在玩法2.8.x中还可能吗? 有没有一个简单的方法可以让你不去这里就呆在老学校里? 我承认,但不完全理解https://www.playframework.com/documentation/2.4.x/migration24。我认为我的问题与2.7中删除
问题内容: 当前在app.js中,我有以下路线: 如您所见,我正在尝试注入Path依赖项。尽管我收到一条错误消息,说找不到该提供程序。我认为这是因为配置模块提供程序首先执行。以下是“ services.js”中我的路径提供程序定义 我怎样才能将此提供程序注入配置模块? 问题答案: 在中,只能使用提供程序(例如)。在你只能使用服务(如实例)。您有一家工厂,而不是供应商。请参阅具有以下三种创建方式的代
考虑此代码GITHUB: Spring模式示例代码 如果您签出第3章-依赖注入,项目中没有任何主类。 我做了一个 mvn清洁安装 这是成功的。 当我执行jar时,我得到以下错误: bash-3.2$java-jar./Target/第-03-Spring-依赖-注入-0.0.1-SNAPSHOT. jar 没有主清单属性,在./Target/第-03-Spring-依赖-注入-0.0.1-SNAP
我喜欢用于bean声明等的注释,但现在我们有这么多具有顺序的bean(@取决于)。很难维护或浏览配置。 是否有任何工具可以根据您的所有bean注释提供“有效的Spring配置”信息?