spring-boot引入测试类之坑

1、说明

sping-boot版本号,不同版本号测试注解会不一样

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.8.RELEASE</version>
    </parent>

2、必要依赖

<dependency>
   <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
<!--如果不同mok,可以不用引用-->
 <dependency>
  <groupId>org.springframework.restdocs</groupId>
     <artifactId>spring-restdocs-mockmvc</artifactId>
     <scope>test</scope>
 </dependency>
 <!--这里引入的junit是4.12版本比较高-->
 <dependency>
   <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <version> 4.12</version>
 </dependency>
 <dependency>
    <groupId>org.springframework</groupId>
     <artifactId>spring-test</artifactId>
     <version>4.3.6.RELEASE</version>
 </dependency>

此时启动测试类会报错:

java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing

是因为junit 版本较高的原因,有2个方法可以解决:一是将junit版本号改成4.10,二是加入下面依赖

 <dependency>
  <groupId>org.hamcrest</groupId>
     <artifactId>hamcrest-all</artifactId>
     <version>1.3</version>
 </dependency>

3、spring-boot接口

@RestController
@RequestMapping(value = "/test/sync/")
@Slf4j
public class Controller {
    @PostMapping(value = "synctest")
    @ResponseBody
    @AuthIgnore
    public String syncTest(@RequestParam(value = "p1")String p1,@RequestParam(value = "p2",required = false)String p2,@RequestParam(value = "p3",required = false)String p3){
       //do something 
    }
}

4、测试类

@RunWith(SpringJUnit4ClassRunner.class)
//MainrLuncher ,是spring-boot 的主启动方法
@SpringBootTest(classes = MainrLuncher.class,
        webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class SpringbootApplicationTest {
    @Autowired
    private TestRestTemplate testRestTemplate;

    @Test
    public void syncTest() throws Exception{
      String p1 = "",p2="",p3="";
      //这里把参数加到Url后面
        String url = "/test/sync/synctest?p1="p1"+"&p2="+"p2"+"&p3="+p3;
        Object result =
                testRestTemplate.postForObject(url,params,
                        Object.class,params );
        System.out.println(result);
    }
}

5、报错

因为我用的是Idea开发工具,其中定的的model类都是lomlock插件的注解,直接用@Data注解省去了getter setter方法,在安装完lombock 后应该还要在idea里面设置一下,但我前面没设置,在跑test的类的时候就一直报错:

setter,getter no such method

同时idea中Message框里面也会有如下提示

Lombok Requires Annotation Processing

此时点击这个提示会弹出如下框:
这里写图片描述
只要勾选Enable annotation processiong就可以了

猜你喜欢

转载自blog.csdn.net/lh87270202/article/details/79895271