为了账号安全,请及时绑定邮箱和手机立即绑定

Mockito弹簧骆驼@Autowire失败

Mockito弹簧骆驼@Autowire失败

慕妹3146593 2021-04-27 09:46:55
我正在尝试对骆驼路线进行单元测试。被测试的路由扩展了一个自定义的抽象RouteBuilder(我知道关于继承优先于继承-这是维护代码)。我已经像@Roman Vottner在这里所做的那样设置了测试。一切正常(初始化),直到我到达层次结构中的第一个抽象类为止。它具有一个@Autowired类,即使在测试开始时对其进行了模拟和@Autowired,该类也未初始化(为null)。关于如何解决注射问题的任何想法?@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));//...  }}在调试时在抽象超类中:@Autowiredpublic ClientServices clientServices;//...String clientNumber=clientServices.getLoggedInNumber();  //clientServices is null and not mocked!//...
查看完整描述

1 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

通过将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;

}

//img1.sycdn.imooc.com//609b33720001f80f09040903.jpg

查看完整回答
反对 回复 2021-05-12
  • 1 回答
  • 0 关注
  • 158 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信