gradle学习笔记:gradle契约测试的执行命令

环境

gradle项目
测试框架:mockito

前言

个人笔记,非教程

配置生成测试代码的任务

// 用于生成 Mock 测试,即测试生成的 Mock 是否符合契约
task generateMockTests << {
    def contractBasePath = projectDir.getAbsolutePath() + '/src/test/java/com/xingren/pms/api/contract/AbstractContractTest.java'
    def contractTestDir = projectDir.getAbsolutePath() + '/gensrc/test/java/com/xingren/pms/api/contract/'
    def mockTestDir = projectDir.getAbsolutePath() + '/gensrc/test/java/com/xingren/pms/api/mock/'
    new File(mockTestDir).mkdirs()
    new File(contractTestDir).mkdirs()

    // 拷贝 TestBase 文件并设置为 MockTest 类别
    def updatedBaseContent = new File(contractBasePath).getText('UTF-8')
            .replaceAll('package com.xingren.pms.api.contract', 'package com.xingren.pms.api.mock')
            .replaceAll('class AbstractContractTest', 'class AbstractMockTest')
            .replaceAll('ContractTest.class', 'com.xingren.pms.api.category.MockTest.class')
    def newBaseFile = new File(mockTestDir + 'AbstractMockTest.java')
    newBaseFile.write(updatedBaseContent, 'UTF-8')

    // 拷贝 ContractTest 文件并修改为 Mock 测试
    new File(contractTestDir).eachFileRecurse { file ->
        if (file.name.endsWith('Test.java') && !file.name.endsWith('MockTest.java')) {
            def newFile = new File(mockTestDir + file.name.replace('Test.java', 'MockTest.java'))
            def updatedContent = file.getText('UTF-8')
                    .replaceAll('package com.xingren.pms.api.contract', 'package com.xingren.pms.api.mock')
                    .replaceAll('io.restassured.module.mockmvc.RestAssuredMockMvc\\.\\*', 'io.restassured.RestAssured.*')
                    .replaceAll('module.mockmvc.specification.MockMvcRequestSpecification', 'specification.RequestSpecification')
                    .replaceAll('MockMvcRequestSpecification', 'RequestSpecification')
                    .replaceAll('Test extends AbstractContractTest', 'MockTest extends AbstractMockTest')
            newFile.write(updatedContent, 'UTF-8')
        }
    }
}

generateMockTests.dependsOn generateContractTests
compileTestJava.dependsOn generateMockTests

生成测试代码命令

./gradlew :admin:generateContractTests  -x vueBuild

-x 跳过某项任务
vueBuild是项目里配置的前端路径,如下:

task vueBuild(type: NpmTask) {
    workingDir = file("$projectDir/frontend")
    args = ['run', 'build']
}

执行契约测试

./gradlew :admin:test -x vueBuild

单独启动后端命令

在设置如下配置后:

bootRun {
    addResources = true

    def env = 'env'
    systemProperty env, System.getProperty(env, 'DEV')
}

执行:

./gradlew clean :admin:bootRun -x vueBuild -x test -x check
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山鬼谣me

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值