- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有基于 SpringMVC 的 webApplication,所有 bean 都是通过注解定义的。今天我尝试为我的 Controller 编写测试。我放了第一个并尝试模拟此 Controller 中使用的服务。我通过以下方式完成的所有这些:
1) 为测试创建上下文文件 clientControllerTest-context.xml
<import resource="classpath:spring-context.xml" />
<bean id="ConnectionDB" name="ConnectionDB" class="org.mockito.Mockito" factory-method="mock">
<constructor-arg value="biz.podoliako.carwash.services.impl.ConnectDB" />
</bean>
其中 spring-context.xml 是我的 webApplication 中使用的主要上下文文件(包括有关真实 ConnectionDB bean 的信息)
2)使用以下配置创建测试类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:controllers/clientControllerTest-context.xml"})
@WebAppConfiguration
当测试运行时,捕获了 NoUniqueBeanDefinitionException 异常。我希望 spring 覆盖 bean ConnectionDB,但实际上它找到了 2 个同名的 bean,而 spring 无法选择必须使用哪一个。
请解释一下我如何使用我的主 spring-context 和模拟其中一个 bean 来测试和避免 NoUniqueBeanDefinitionException(如果可能的话)。
注意:我认为为测试创建包含所有配置的上下文不是一个好主意,因此我尝试使用我的主 spring-context。
最佳答案
您可以为您的 Spring 应用程序定义 profiles,并绑定(bind)您的 @Configuration
类或 @Bean
方法(甚至您的自定义元-注释,如果你使用的话)到命名的配置文件,如果你愿意的话,甚至可以是多个配置文件。然后你可以定义名称为 test
、development
、production
或任何你想到的自定义场景的配置文件,并将你的 bean 注册到你的 Spring基于当前 Activity 配置文件的上下文。
像这样为 test
和 anotherTest
配置文件定义 bean:
@Configuration
@Profile({"test", "anotherTest"})
public class SomeConfig {...}
或者在 xml 文件中:
...
<beans profile="test, anotherTest">
<bean .../>
</beans>
...
以类似的方式定义您的production
受限bean,以避免配置文件中的bean 冲突。然后,在您的 JUnit 测试类上使用 @ActiveProfiles
注释来指示您希望在运行测试时激活哪些配置文件:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(...)
@ActiveProfiles({"test", "anotherTest"})
请参阅其他问题 Default profile in Spring 3.1关于如何在 webapp 或 javadoc 中默认激活配置文件 org.springframework.core.env.Environment
如果您想以编程方式进行。
关于java - 如何模拟 bean 并避免 NoUniqueBeanDefinitionException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34844604/
SpringMVC 应用程序使用最新的 jars。花了很长时间试图找出这篇文章失败的问题。如果有人遇到过这个问题,请您能回复一下 错误堆栈 INFO : org.springframework.bea
我正在使用 Spring 3.2.2,并且想知道是否有一种方法可以按类类型注入(inject) bean,而无需显式为其提供字符串名称。例如: @Named public MyClass{ } @Na
Spring 新手,现在正在学习依赖注入(inject)。我已经知道 Qualifier 注解用于区分不同的依赖关系。但是以下代码不起作用。 @Bean @Qualifier("tay
我正在使用 Spring boot,我定义了 spring.datasource.* 属性来启用我的数据源。如果我只使用它,它就可以正常工作。但是,我现在也尝试使用以下配置将 JMS 添加到我的应用程
尝试使用 Autowiring 两个 bean 时出现以下错误 No qualifying bean of type [javax.jms.ConnectionFactory] is defined:
我有一个带有 Spring 的 Maven 多模块项目。我有一个核心项目,其中包含所有数据访问 bean 以及entityManagerFactoryBean。 现在我有另一个 Maven 模块项目,
我正在开发基于 Spring MVC 的 Web 应用程序,其中我有两个数据源,为此我需要维护两个事务 **DataSourceTransactionManager**, 我什么也没做,只是复制了我的
问题 我收到错误 Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying
我正在尝试为我的 @Component 类创建一个具有继承的结构,以便重用一些通用代码。但我收到运行时错误: Caused by: org.springframework.beans.factory.
我有基于 SpringMVC 的 webApplication,所有 bean 都是通过注解定义的。今天我尝试为我的 Controller 编写测试。我放了第一个并尝试模拟此 Controller 中
我有一个 SpringBoot main/Application.java 类 @SpringBootApplication @ComponentScan(value = "com.nfl.dm.sh
我将下面的 bean 定义为 A.jar 的一部分 package abc; @Component public class ParentInterceptor implements ClientIn
我正在使用 Spring boot 和 Spring batch。我已经定义了不止一项工作。 我正在尝试构建 junit 来测试作业中的特定任务。 因此,我正在使用 JobLauncherTestUt
我有这个父类(super class): @Component public class DAOBase { } 另一个类扩展了 DAOBase @Component public class Voc
我正在开发一个解决方案来在 SmsService 中实现多个提供程序。我需要一种从我的上下文中注入(inject)策略类的方法。问题是选择取决于外部属性。当我尝试部署此代码时,我得到 org.spr
是否可以在构造函数中将泛型类型 Autowiring 到不同的泛型类型中?我目前的结构如下: @Service public class ExampleService { @Autowired Ser
我最近发布了一个有关多个数据源的问题。一切顺利,直到我遇到这个问题: 控制者 def doSomething() { def user=userService.getCurrentUser(
在Spring Boot和Mybatis项目中配置多个数据源时,出现以下异常: org.springframework.beans.factory.NoUniqueBeanDefinitionExce
我正在编写一个需要多种身份验证机制(基本、x509 和匿名)的 RESTful Web 服务。因此我有三个 三个独立的 spring 上下文文件中的元素。 当我启动我的服务时,出现以下异常: org.
我在使用@MockBean 注释时遇到问题。文档说 MockBean 可以替换上下文中的 bean,但我在单元测试中遇到了 NoUniqueBeanDefinitionException。我看不到如何
我是一名优秀的程序员,十分优秀!