当前位置: 首页 > 知识库问答 >
问题:

Mockito Spring Camel@Autowire失败

夹谷阳夏
2023-03-14

我试图单元测试一个骆驼路线。被测试的路线扩展了一个自定义的抽象RouteBuilder(我知道关于偏爱组合而不是继承-这是维护代码)。我已经像@Roman Vottner在这里所做的那样设置了我的测试。一切都可以工作(初始化),直到我击中层次结构中的第一个抽象类。它有一个@Autowoe类,它没有初始化(为null),即使它在测试开始时被嘲笑和@Autowoe。关于如何解决我的注入问题有什么想法吗?

@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!
//...

共有1个答案

禄烨然
2023-03-14

通过将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;
}
 类似资料:
  • Autowire 包含一对宏,可以让你在两个 Scala 系统之间执行类型安全、无反射的 RPC 远程过程调用。示例代码: // shared interfacetrait Api{  def add(x: Int, y: Int, z: Int): Int }// server-side router and implementation object Server extends autowi

  • 问题内容: 总的来说,我对Web上的Spring和Java还是很陌生,但是周末我一直在为此苦苦挣扎。将所有配置整合在一起并使Spring在IntelliJ上与gradle一起使用是一个挑战。 我正在尝试在Spring中实施另一个项目,以便更好地了解如何使用它。 我整个上午都在收到此错误,并且在Spring上浏览了许多参考资料和指南,但是看不到问题出在哪里。 由以下原因引起:org.springfr

  • 我使用的是。我在自动读取或时遇到了一个问题。如果我为配置,我将得到以下错误。 更新来自我11月22日: 如果我创建了新的类并在该类上启用自动配置,那么JavaMailSender和JavaMailSenderImpl就可以正确地实现autowired,Spring Boot应用程序就可以成功启动。我已经在application.class中启用了AutoConfiguration。用EnableA

  • 问题内容: 总的来说,我对Web上的Spring和Java还是很陌生,但是周末我一直在为此苦苦挣扎。将所有配置整合在一起并使Spring在IntelliJ上与gradle一起使用是一个挑战。 我正在尝试在Spring中实施另一个项目,以便更好地了解如何使用它。 我整个上午都在收到此错误,并且在Spring上浏览了许多参考资料和指南,但看不到问题出在哪里。 由以下原因引起:org.springfra