我正在测试的 Action 中没有符合条件的 bean 类型
No qualifying bean of type for a bean in the Action I'm testing
我在 eclipse 上做一个项目,使用 tomcat、maven、spring、hibernate 和 struts。我们有 2 个应用程序:
包含所有 bean(服务)和带有操作视图等的 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: Error creating bean with name 'web.action.A': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: public core.service.ExampleService web.action.A.exampleService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [core.service.ExampleService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
无论我调用哪个 bean,我都会收到此错误。它们都在核心应用程序和我的 Action 中工作,我什至可以在我的测试中直接调用它们而不会出现任何错误,但每次我尝试启动测试时它都会失败。
有谁知道什么可能会抛出这个异常?
抛出 BeanCreationException
因为在您的测试上下文中没有 ExampleService
bean。这可能是因为没有为您的操作测试加载正确的上下文。
由于您使用的是 JUnit 4,因此您应该扩展 StrutsSpringJUnit4TestCase
class 而不是 StrutsSpringTestCase
,这将更好地配合 @RunWith(SpringJUnit4ClassRunner.class)
和上下文加载。
我在 eclipse 上做一个项目,使用 tomcat、maven、spring、hibernate 和 struts。我们有 2 个应用程序: 包含所有 bean(服务)和带有操作视图等的 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: Error creating bean with name 'web.action.A': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: public core.service.ExampleService web.action.A.exampleService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [core.service.ExampleService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
无论我调用哪个 bean,我都会收到此错误。它们都在核心应用程序和我的 Action 中工作,我什至可以在我的测试中直接调用它们而不会出现任何错误,但每次我尝试启动测试时它都会失败。
有谁知道什么可能会抛出这个异常?
抛出 BeanCreationException
因为在您的测试上下文中没有 ExampleService
bean。这可能是因为没有为您的操作测试加载正确的上下文。
由于您使用的是 JUnit 4,因此您应该扩展 StrutsSpringJUnit4TestCase
class 而不是 StrutsSpringTestCase
,这将更好地配合 @RunWith(SpringJUnit4ClassRunner.class)
和上下文加载。