在不同的Spring Boot版本中@ExtendWith的使用也有所不同,其中在Spring boot 2.1.x之前, @SpringBootTest 需要配合@ExtendWith(SpringExtension.class)才能正常工作的。

而在Spring boot 2.1.x之后,我们查看@SpringBootTest 的代码会发现,其中已经组合了@ExtendWith(SpringExtension.class),因此,无需在进行该注解的使用了。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@BootstrapWith(SpringBootTestContextBootstrapper.class)
@ExtendWith(SpringExtension.class)
public @interface SpringBootTest {
   @AliasFor("properties")
   String[] value() default {};
   @AliasFor("value")
   String[] properties() default {};
   Class<?>[] classes() default {};

   WebEnvironment webEnvironment() default WebEnvironment.MOCK;

   enum WebEnvironment {
      MOCK(false),
      RANDOM_PORT(true), 
      DEFINED_PORT(true), 
      NONE(false);
      …
   }
}

官方也给出了相应的说明:

If you are using JUnit 4, don’t forget to also add @RunWith(SpringRunner.class) to your test, otherwise the annotations will be ignored. If you are using JUnit 5, there’s no need to add the equivalent @ExtendWith(SpringExtension.class) as @SpringBootTest and the other @…Test annotations are already annotated with it.

因此,在Spring Boot2.1.x之后单元测试可以简单的写成如下形式:

@SpringBootTest
public class OrderServiceTest {

   @Resource
   private OrderService orderService;

   @Test
   public void testInsert() {
      Order order = new Order();
      order.setOrderNo("A001");
      order.setUserId(100);

      orderService.insert(order);
   }
} 

相关文章:《SPRING BOOT JUNIT5单元测试注入BEAN抛NULLPOINTEREXCEPTION空指针异常

Spring boot junit5单元测试@ExtendWith无法工作插图


Spring boot junit5单元测试@ExtendWith无法工作插图1

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:http://choupangxia.com/2019/11/13/spring-boot-junit5-extend-with/