Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Mockito弹簧驼峰@Autowire故障_Java_Spring_Apache Camel_Mockito - Fatal编程技术网

Java Mockito弹簧驼峰@Autowire故障

Java Mockito弹簧驼峰@Autowire故障,java,spring,apache-camel,mockito,Java,Spring,Apache Camel,Mockito,我正在尝试对骆驼路线进行单元测试。测试中的路由扩展了一个自定义的抽象RouteBuilder(我知道更喜欢组合而不是继承-这是维护代码)。我已经像@Roman Vottner那样设置了我的测试。在我找到层次结构上的第一个抽象类之前,一切都正常(初始化)。它有一个未初始化的@Autowired类(为null),即使它在测试开始时被模拟和@Autowired。有什么办法解决我的注射问题吗 @RunWith(CamelSpringRunner.class) @BootstrapWith(CamelTe

我正在尝试对骆驼路线进行单元测试。测试中的路由扩展了一个自定义的抽象RouteBuilder(我知道更喜欢组合而不是继承-这是维护代码)。我已经像@Roman Vottner那样设置了我的测试。在我找到层次结构上的第一个抽象类之前,一切都正常(初始化)。它有一个未初始化的@Autowired类(为null),即使它在测试开始时被模拟和@Autowired。有什么办法解决我的注射问题吗

@RunWith(CamelSpringRunner.class)
@BootstrapWith(CamelTestContextBootstrapper.class)
@ContextConfiguration(loader = AnnotationConfigContextLoader.class, classes = {FooRouteTest.ContextConfig.class})
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
public class FooRouteTest {

  @Configuration
  @PropertySource({"classpath:some.properties", "classpath:environment.properties"})
  public static class ContextConfig extends CamelConfiguration {

    @Bean
    public UserServices userServices() {
      return mock(UserServices.class);
    } //and many more of the like
  }

  @Autowired
  private UserServices userServices; //and all the others too

  @Test
  public void testAfoo() throws Exception {
//....
    template.setDefaultEndpointUri("direct://getTheData");
    template.sendBody(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonNode));
//...
  }
}
调试时在抽象超类中:

@Autowired
public ClientServices clientServices;
//...
String clientNumber=clientServices.getLoggedInNumber();  //clientServices is null and not mocked!
//...

通过将FooRoute显式声明为bean解决了此问题:

@Bean
public FooRoute fooRoute(){
  return new FooRoute();
}

@Override
public List<RouteBuilder> routes() {
  final List<RouteBuilder> routes = new ArrayList<>();
  routes.add(fooRoute());
  return routes;
}
@Bean
公共食物路线食物路线(){
返回新的FooRoute();
}
@凌驾
公共列表路线(){
最终列表路由=新的ArrayList();
添加(fooRoute());
返回路线;
}