我正在测试的 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) 和上下文加载。