在不运行@SpringBootApplication的情况下测试Spring Boot服务

时间:2018-10-12 10:28:43

标签: unit-testing spring-boot

我有一个spring boot命令行应用程序:

    @SpringBootApplication
    public class TheApplication implements CommandLineRunner {
      public void run(String... args) throws Exception {
        ...
     }
    }

,我想测试@Service使用的TheApplication。通常,如果这是一个TheApplication没有任何功能的mvc应用程序,则很好,在这种情况下,它是CommandLineRunner,并且每次我想测试@Servicerun被称为,导致测试出现问题。我需要对测试进行注释,因为@Service使用@Value进行自我配置,但是这些注释会导致应用程序启动并调用run方法。

是否可以运行弹簧启动测试?

@RunWith(SpringRunner.class)
@SpringBootTest
public class AccessTokenTest {
  ...
}

是否调用了TheApplication::run

1 个答案:

答案 0 :(得分:2)

根据此answer证明,这相当容易。

@Configuration
@ComponentScan(excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = CommandLineRunner.class))
@EnableAutoConfiguration
public class TestApplicationConfiguration {
}

@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestApplicationConfiguration.class)
public class TheTest {
  @Autowired
  TheService theService;

  ...
}