3

我在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:创建名为“web.action.A”的bean时出错:注入自动装配的依赖项失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法自动装配字段:public core.service.ExampleService web.action.A.exampleService;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有为依赖项找到类型为 [core.service.ExampleService] 的合格 bean:预计至少有 1 个 bean 有资格作为此依赖项的自动装配候选者。依赖注解:{@org.springframework.beans.factory.annotation.Autowired(required=true)}

不管我打电话给哪个 bean,我都收到了这个错误。它们都在核心应用程序和我的操作中工作,我什至可以在我的测试中直接调用它们而不会出现任何错误,但每次我尝试启动测试时它都会失败。

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

4

1 回答 1

3

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

由于您使用的是 JUnit 4,StrutsSpringTestCase因此您应该扩展StrutsSpringJUnit4TestCase类,它可以更好地处理@RunWith(SpringJUnit4ClassRunner.class)上下文加载。

于 2016-04-27T14:12:08.033 回答