Spring boot 单元测试的一点感悟


前言

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();
            }
        };
    }
}

总结

第二步只是举了两个例子,仅作参考,思路都是去简单模拟服务端。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值