在Action I' m测试中没有bean类型的限定bean

时间:2016-04-27 13:19:33

标签: spring junit struts2 struts2-junit-plugin

我在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中工作,我甚至可以在我的测试中直接调用它们而没有任何错误,但每次我尝试启动测试时它都会失败。

有谁知道什么可能引发此异常?

1 个答案:

答案 0 :(得分:3)

抛出BeanCreationException,因为测试上下文中没有ExampleService bean。这可能是因为没有为您的操作测试加载正确的上下文。

由于您使用的是JUnit 4,而不是StrutsSpringTestCase,因此您应该扩展StrutsSpringJUnit4TestCase类,该类将使用@RunWith(SpringJUnit4ClassRunner.class)和上下文加载更好。