前言
Spring boot高版本和junit5
随着spring boot版本的更新,junit也从4到5,单元测试的写法有了稍许的变化
一、新版用法
直接引用test模块
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
测试类如果需要启动spring上下文,则使用@SpringBootTest
,不再需要@RunWith()
测试方法直接使用@Test
,使用org.junit.jupiter.api.Test
就可以了
二、一些测试小技巧
1.第三方接口
一般测试需要启动Spring上下文,加载配置,所以这时候会使用TestRestTemplate
去调用接口模拟,而调用第三方接口用RestTemplate
,直接去mockRestTemplate
,会有冲突的可能,可以采用直接模拟服务端的形式
HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0);
server.createContext("/", new MyHandler());
server.setExecutor(null);
System.out.println("Starting server on port: 8080");
server.start();
2.Grpc
Grpc长链接,直接采用模拟服务端/客户端的形式,这里展示模拟服务端
引入jar包
<dependency>
<groupId>org.lognet</groupId>
<artifactId>grpc-spring-boot-starter</artifactId>
<version>2.3.2</version>
<scope>test</scope>
</dependency>
@GRpcService
@Slf4j
public class GrpcService extends IatGrpc.IatImplBase {
@Override
public StreamObserver<Dictation.IatRequest> createRec(StreamObserver<Dictation.IatResult> responseObserver) {
return new StreamObserver<Dictation.IatRequest>() {
@Override
public void onNext(Dictation.IatRequest request) {
Dictation.IatResult iatResult = Dictation.IatResult.newBuilder()
.setAnsStr("{\"sn\":4,\"bg\":2154,\"ed\":2295,\"eg\":60.02,\"ls\":false,\"ws\":[{\"bg\":0,\"cw\":[{\"sc\":0.0,\"w\":\"中国\"}]},{\"bg\":0,\"cw\":[{\"sc\":0.0,\"w\":\"台北\"}]},{\"bg\":0,\"cw\":[{\"sc\":0.0,\"w\":\"选手\"}]},{\"bg\":0,\"cw\":[{\"sc\":0.0,\"w\":\"戴\"}]},{\"bg\":0,\"cw\":[{\"sc\":0.0,\"w\":\"资\"}]},{\"bg\":0,\"cw\":[{\"sc\":0.0,\"w\":\"颖\"}]},{\"bg\":0,\"cw\":[{\"sc\":0.0,\"w\":\"。\"}]}]}")
.setEndFlag(true)
.setErrCode(0)
.build();
responseObserver.onNext(iatResult);
}
@Override
public void onError(Throwable t) {
log.error("", t);
responseObserver.onError(t);
}
@Override
public void onCompleted() {
log.info("completed");
responseObserver.onCompleted();
}
};
}
}
总结
第二步只是举了两个例子,仅作参考,思路都是去简单模拟服务端。