我在eclipse上工作,使用tomcat,maven,spring,hibernate和struts。我们有2个应用: 包含所有bean(服务)的核心和包含actions视图等的Web。
我为服务做了JUnit测试,并决定尝试对Actions进行一些测试。以下是我尝试做的一个例子:
动作
@Action(value = "/modif/register")
@ResultPath("...")
public class A{
@Autowired
private ExampleService exampleService;
public String execute(){
Example = exampleService.find(...);
...
...
}
}
测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = Config.class)
public class ATest extends StrutsSpringTestCase {
@Before
public void setUp(){
try {
super.setUp();
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void testExecute() throws Exception{
request.setParameter(...);
//filling up the request
ActionProxy proxy = super.getActionProxy("/modif/register");
A register = (A) proxy.getAction();
String result = proxy.execute();
}
}
配置
@Configuration
@ComponentScan(basePackages = {"web","core"} )
public class Config {
//configuration
}
每次尝试启动此测试时,我都会在ActionProxy proxy = super.getActionProxy("/modif/register");
org.springframework.beans.factory.BeanCreationException:创建名称为' web.action.A'的注册自动连接依赖项失败;嵌套异常是org.springframework.beans.factory.BeanCreationException:无法自动装配字段:public core.service.ExampleService web.action.A.exampleService;嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有为依赖项找到类型为[core.service.ExampleService]的限定bean:预期至少有一个bean可以作为此依赖项的autowire候选者。依赖注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true)}
我得到了这个错误,无论我打电话给哪个豆子。它们都在核心应用程序和我的Action中工作,我甚至可以在我的测试中直接调用它们而没有任何错误,但每次我尝试启动测试时它都会失败。
有谁知道什么可能引发此异常?
答案 0 :(得分:3)
抛出BeanCreationException
,因为测试上下文中没有ExampleService
bean。这可能是因为没有为您的操作测试加载正确的上下文。
由于您使用的是JUnit 4,而不是StrutsSpringTestCase
,因此您应该扩展StrutsSpringJUnit4TestCase
类,该类将使用@RunWith(SpringJUnit4ClassRunner.class)
和上下文加载更好。