【发布时间】:2016-04-23 00:38:08
【问题描述】:
我有基于 SpringMVC 的 webApplication,所有 bean 都通过 注解 进行定义。今天我尝试为我的控制器编写测试。我放了第一个并尝试模拟此控制器中使用的服务。所有这一切我都是通过以下方式完成的:
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 中使用的主要上下文文件(包括有关 real ConnectionDB bean 的信息)
2)使用以下配置创建测试类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:controllers/clientControllerTest-context.xml"})
@WebAppConfiguration
运行测试时,NoUniqueBeanDefinitionException 异常被捕获。我希望 spring 覆盖 bean ConnectionDB 但实际上它找到了 2 个具有同一个名称的 bean,并且 spring 无法选择必须使用哪一个。
请解释我如何使用我的主要弹簧上下文并模拟其中一个 bean 进行测试并避免 NoUniqueBeanDefinitionException(如果它可能是原因的话)。
注意:我认为使用所有测试配置创建上下文是一个坏主意,因此我尝试使用我的主要 spring-context。
【问题讨论】:
标签: java spring spring-mvc