【问题标题】:How to execute integrationtests for own OData service in SAP Cloud SDK如何在 SAP Cloud SDK 中为自己的 OData 服务执行集成测试
【发布时间】:2020-01-14 00:23:25
【问题描述】:

我们目前在 Spring Boot 应用程序中使用 SAP Cloud Platform Provisioning SDK 提供自己的 OData 服务,该 SDK 是 SAP Cloud SDK 的一部分。我们正在各自的 Maven 模块中创建集成测试,但是当通过 Maven 执行它时,它会失败并显示以下堆栈跟踪:

[http-nio-auto-1-exec-1] ERROR com.sap.cloud.sdk.service.prov.v2.rt.cdx.CDXRuntimeDelegate - Error initializing the service <service-name>
java.lang.IllegalArgumentException: URI is not hierarchical
        at java.io.File.<init>(File.java:418)
        at com.sap.cloud.sdk.service.prov.v2.rt.cdx.CDXRuntimeDelegate.getFilefromFileName(CDXRuntimeDelegate.java:410)
        at com.sap.cloud.sdk.service.prov.v2.rt.cdx.CDXRuntimeDelegate.getFileForService(CDXRuntimeDelegate.java:387)
        at com.sap.cloud.sdk.service.prov.v2.rt.cdx.CDXRuntimeDelegate.initialize(CDXRuntimeDelegate.java:252)
        at com.sap.cloud.sdk.service.prov.v2.rt.cdx.CDXRuntimeDelegate.getModelProvider(CDXRuntimeDelegate.java:204)
        at com.sap.gateway.core.api.provider.delegate.ProviderFactory.createModelProvider(ProviderFactory.java:202)
        at com.sap.gateway.core.api.provider.delegate.ProviderFactory.getEdmModelProvider(ProviderFactory.java:128)
        at com.sap.gateway.core.odata4sap.ServiceFactory.createService(ServiceFactory.java:135)

看代码这似乎与以下帖子有关:

Why is my URI not hierarchical?

在 SDK 中,OData EDMX 文件作为文件读取,但是由于在 Maven 执行期间它位于(应用程序模块的)单独的 JAR 文件中,因此无法以这种方式访问​​。相反,它需要被读取为流,这反过来似乎需要一些重构。

作为一种解决方法,我将 EDMX 文件复制到了集成测试模块的 src/test/resources/edmx。

我现在想知道我是否在这里遗漏了什么,或者按照 SAP Cloud SDK 通常执行的集成测试的执行是否与供应框架不兼容?

【问题讨论】:

    标签: sap-cloud-sdk


    【解决方案1】:

    作为 Alexander 已经发布的替代方案,您还可以通过 maven 自动复制文件,就像在这个 sn-p 中一样:

                <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.6</version>
                <executions>
                    <!-- Copying the edmx files to the integration-tests project -->
                    <execution>
                        <id>copy-resources</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${basedir}/src/test/resources/edmx</outputDirectory>
                            <resources>
                                <resource>
                                    <directory>${project.parent.basedir}/srv/src/main/resources/edmx</directory>
                                    <filtering>true</filtering>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                    <execution>
                        <id>default-testResources</id>
                        <phase>process-test-resources</phase>
                        <goals>
                            <goal>testResources</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>default-resources</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>resources</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
    

    【讨论】:

      【解决方案2】:

      虽然我对您解释的用例不太熟悉,但我建议您查看Maven documentation on additional resource folders。除了它自己的/resources 文件夹外,您还可以将 integration-tests 模块指向 application 模块的相应 /resources 文件夹。我认为相对路径应该是可能的。

      【讨论】:

      • 感谢您的提示,我也在考虑自动化解决方法,这对我来说似乎是一个非常好的解决方案!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-27
      • 2019-09-24
      • 2020-06-15
      • 2011-09-24
      • 1970-01-01
      相关资源
      最近更新 更多