我正在尝试使用Swagger测试模板并发现这是一个有趣的工具来为我的控制器生成测试文件,但它似乎只适用于NodeJs项目,因为Java平台没有类似的工具。
有人知道如何通过使用swagger文件为我的控制器生成这些Test文件吗?
PD:
我尝试使用像RepreZen和SwaggerHub这样的商业工具,但他们没有为我生成测试文件。
我也试过使用swagger-generator jar工具来生成那种文件,但是这个工具只为Client生成代码,但是没有为Server生成代码。
你好多了!。
答案 0 :(得分:2)
为了测试Spring-family项目的API,您可以使用Springfox + AssertJ Swagger库。您还需要一个包含API规范的YAML文件。这个解决方案的主要思想是将契约优先的Swagger YAML文件与SpringFox生成的代码优先的Swagger JSON进行比较。
Springfox与Spring MVC集成,支持Swagger 1.2和Swagger 2.0规范。 Springfox能够在运行时为使用Spring构建的API自动生成JSON API文档。
Assertj-Swagger是一个库,它将设计优先的Swagger YAML与实现优先的Swagger JSON输出(例如来自springfox)进行比较。 assertj-swagger允许验证实现是否符合设计规范。
的pom.xml
<!-- http://springfox.io -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>io.github.robwin</groupId>
<artifactId>assertj-swagger</artifactId>
<version>0.6.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.8.0</version>
<scope>test</scope>
</dependency>
测试代码:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class AssertJSwaggerConsumerDrivenTest {
@LocalServerPort
int randomPort;
@Test
public void validateThatImplementationSatisfiesConsumerSpecification() {
File designFirstSwagger = new File(AssertJSwaggerConsumerDrivenTest.class.getResource("/swagger.yaml").getFile());
SwaggerAssertions.assertThat("http://localhost:" + randomPort + "/v2/api-docs")
.satisfiesContract(designFirstSwagger.getAbsolutePath());
}
}
java.lang.UnsupportedClassVersionError: io/github/robwin/swagger/test/SwaggerAssertions : Unsupported major.minor version 52.0
java.lang.NoSuchMethodError: io.swagger.models.parameters.AbstractSerializableParameter.setMaximum(Ljava/lang/Double;)V
答案 1 :(得分:1)
埃里克森,
虽然RepreZen API Studio目前还没有包含用于单元测试的生成器模板,但您可以使用内置工具和代码框架为此目的编写自定义代码生成器。
此处有更多信息:http://docs.reprezen.com/#code-gen
如果您想就此进行合作,请随时与我们联系。
Ted Epstein,首席执行官| RepreZen
答案 2 :(得分:1)
埃里克森,
嗨!我是swagger-test-templates的贡献者之一。这个问题也被问到here,我answered it there,但我会在这里复制。
简单回答:不,它不仅仅适用于Node.js API或swagger-node。
更长的答案:您可以像Node.js项目中的任何其他Node.js模块一样使用STT,完全靠它自己。有关如何独立运行它的示例,请参阅Readme或测试文件。此外,不必在Node.js中实现API,以便STT生成的测试使用HTTP请求来定位它。您必须使用Node.js来利用此模块的功能,但只要您将测试指向正在运行的服务器(localhost:1337,my.api.test.net),后端实现就无关紧要了。需要注意的是,此模块设计为使用mocha运行,这是一个Node.js测试运行器/框架。所以测试必须在Node.js项目中,但服务器实现不是。
编辑: 那就是说,它确实生成了Node.js代码,而不是Java代码,如果那就是你要找的东西。如果我可以回答任何问题,请跟进。