微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

scc gradle插件:使用从本地Maven存储库中的存根生成的奇怪程序包名称进行测试

如何解决scc gradle插件:使用从本地Maven存储库中的存根生成的奇怪程序包名称进行测试

我将以下合同存储库克隆到了我的本地文件系统中:

ABCnet
│   └── application-services-xyz
│       ├── clientA
│       │   └── shouldReturnHelloWorld.groovy
│       ├── mvnw
│       ├── mvnw.cmd
│       ├── pom.xml

当我们在生产者端处理遗留产品时,也许值得一提的是groupId和artifactId不遵循标准约定。这是上述合同仓库中的pom.xml:

<project xmlns:xsi="...">

    <groupId>ABCnet</groupId>
    <artifactId>application-services-xyz</artifactId>
    <version>0.0.1</version>

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

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
        <spring-cloud-contract.version>2.2.4.RELEASE</spring-cloud-contract.version>
        <spring-cloud-dependencies.version>Hoxton.RELEASE</spring-cloud-dependencies.version>
        <!-- We don't want to run tests -->
        <skipTests>true</skipTests>
        <excludeBuildFolders>true</excludeBuildFolders>
    </properties>

    <build>
        <plugins>
            <plugin>
                <artifactId>spring-cloud-contract-maven-plugin</artifactId>
                <groupId>org.springframework.cloud</groupId>
                <version>${spring-cloud-contract.version}</version>
                <extensions>true</extensions>
                
                <configuration>
                    <!-- By default it would search under src/test/resources/ -->
                    <contractsDirectory>${project.basedir}</contractsDirectory>
                </configuration>
            </plugin>
        </plugins>
    </build>
    ...
</project>

当我运行mvnw install时,将创建具有以下结构的jar:

application-services-xyz-0.0.1-stubs.jar
├── meta-inf
│   ├── ABCnet
│   │   └── application-services-xyz
│   │       └── 0.0.1
│   │           ├── contracts
│   │           │   └── clientA
│   │           │       └── shouldReturnHelloWorld.groovy
│   │           └── mappings
│   │               └── clientA
│   │                   └── shouldReturnHelloWorld.json
│   └── MANIFEST.MF

我有一个生产者应用程序,我想从上面的stubs.jar中的合同生成测试。这是在生产者端配置合同插件的方式:

contracts {
    contractDependency {
        stringNotation = 'ABCet:application-services-xyz:0.0.1'
    }
    contractsMode = "LOCAL"

    packageWithBaseClasses = 'com.abcmedia.services.xyz'
    basePackageForTests='com.abcmedia'
    baseClassMappings {
        baseClassMapping("com.abcmedia.services.xyz.*","de.abcmedia.services.xyz.ClientABase")
    }
    generatedTestSourcesDir = project.file('test-generated/java')
}

当我运行gradlew generateContractTests时,会生成一个测试类:

package com.abcmedia.Meta_INF.ABCnet.application_services_xyz._0_0_1.contracts;

import com.abcmedia.services.xyz.ContractsClientABase;

@SuppressWarnings("rawtypes")
public class MeddbTest extends ContractsClientABase {

    @Test
    public void validate_shouldReturnHelloWorld() throws Exception {
        ...
    }
}

这是我的问题:

  • 生成的Test类期望使用ContractsClientABase的基类,而ClientABase已配置
  • 软件包名称应为com.abcmedia.ABCnet而不是com.abcmedia.Meta_INF.ABCnet.application_services_xyz._0_0_1.contracts

我的资源已用尽,不胜感激。预先谢谢你!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。