Spring TestRestTemplate没有正确自动装配

时间:2017-06-13 15:55:05

标签: java spring junit

我目前正在使用Spring Boot 1.5.4以及Junit 5和Java 8.

我想使用Junit的ParameterizedTest对存储在csv文件中的多个条目设置集成测试。

以下是代码:

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class MatchingIT {

    @Autowired
    private TestRestTemplate template;

    @ParameterizedTest
    @MethodSource(names = "vehicles")
    void nonRegressionTests(EDIVehicle vehicle) {
        ResponseEntity<Vehicle> v = template.getForEntity("/match/" + vehicule.getId(), Vehicle.class);
        Assert.assertNotNull(v);
    }

    private static Stream<EDIVehicle> vehicles() throws IOException {
        InputStream is = new ClassPathResource("/entries.csv").getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        return br.lines().map(toVehicle);
    }

    private static Function<String, EDIVehicle> toVehicle = (line) -> {
        String[] p = line.split("\\|");
        return new EDIVehicle(p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8], p[9], p[10], p[11], p[12]);
    };
}

我从文档中得知:

  

如果您使用@SpringBootTest注释,TestRestTemplate将自动可用,并且可以@Autowired进入您的测试。

问题是我使用SpringBootTest注释,但是当我运行测试时,TestRestTemplate始终为null。也许我错过了什么。

编辑:添加@RunWith(SpringRunner.class)注释时我确实遇到了同样的问题

3 个答案:

答案 0 :(得分:2)

我最终使用了以下repo中的依赖关系:github.com/sbrannen/spring-test-junit5,如提到@LucasP

由于在Spring 4.3及以下版本中没有对JUnit 5的第一类支持,因此它帮助我在我的测试类上使用@ExtendWith(SpringExtension.class)正确地自动装配Spring TestRestTemplate。

下一步是直接使用Spring Boot 2.0来更好地支持JUnit 5.

答案 1 :(得分:1)

@SpringBootTest与JUnit 5不完全兼容。但是,您可以使用下一个测试声明来解决此问题:

@RunWith(JUnitPlatform.class)
@ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment = RANDOM_PORT)
class MatchingIT {...}

注意:您必须将spring-boot-starter-test版本升级为2.0.0.M1才能使用org.springframework.test.context.junit.jupiter.SpringExtension(最简单的方法是使用start.spring.io }用于生成依赖于2.0.0.M1的项目并从那里获取所需的maven / gradle依赖项。

答案 2 :(得分:-1)

我认为您错过了@RunWith(SpringRunner.class)并且还要确保初始化上下文的类(通常是包含main方法的类)具有@SpringBootApplication注释(否则@SpringBootTest不会#39;找到要加载测试的上下文。