Stub Runner JUnit Rule and Stub Runner JUnit5 Extension
Stub Runner 带有一个 JUnit 规则,它允许您可以下载并运行给定组和工件 ID 的存根,如下面的示例所示:
link:{stubrunner_core_path}/src/test/groovy/org/springframework/cloud/contract/stubrunner/junit4/StubRunnerRuleJUnitTest.java[role=include]
JUnit 5 也提供了一个 StubRunnerExtension
。StubRunnerRule
和 StubRunnerExtension
的工作方式非常类似。在调用规则或扩展后,Stub Runner 会连接到你的 Maven 存储库,并尝试针对给定的依赖项列表执行以下操作:
-
Download them
-
Cache them locally
-
将它们解压缩到临时文件夹
-
为随机端口上的每个 Maven 依赖项启动一个 WireMock 服务器,该端口取自提供的端口范围或提供的端口
-
使用所有有效的 WireMock 定义的 JSON 文件为 WireMock 服务器提供信息
-
发送消息(请记住传递
MessageVerifierSender
接口的实现)
Stub Runner 使用 Eclipse Aether 机制下载 Maven 依赖项。查看其 docs 以了解更多信息。
由于 StubRunnerRule
和 StubRunnerExtension
实现了 StubFinder
,你可以像以下示例所示那样查找启动的 Stub:
link:{stubrunner_core_path}/src/main/java/org/springframework/cloud/contract/stubrunner/StubFinder.java[role=include]
以下示例提供了关于使用 Stub Runner 的更多详细信息:
link:{stubrunner_core_path}/src/test/groovy/org/springframework/cloud/contract/stubrunner/junit4/StubRunnerRuleSpec.groovy[role=include]
link:{stubrunner_core_path}/src/test/groovy/org/springframework/cloud/contract/stubrunner/junit4/StubRunnerRuleJUnitTest.java[role=include]
link:{stubrunner_core_path}/src/test/java/org/springframework/cloud/contract/stubrunner/junit/StubRunnerJUnit5ExtensionTests.java[role=include]
请参阅 Common Properties for JUnit and Spring 以了解有关如何应用 Stub Runner 的全局配置的更多信息。
要将junit规则或junit 5扩展与消息传递一起使用,必须为规则生成器(例如`rule.messageVerifierSender(new MyMessageVerifierSender())`)提供`MessageVerifierSender`和`MessageVerifierReceiver`界面的实现。如果不这样做,那么每当尝试发送消息时就会引发异常。
Fluent API
当使用 StubRunnerRule
或 StubRunnerExtension
时,你可以添加要下载的 Stub,然后传递最后一个下载的 Stub 的端口。以下示例展示了如何执行此操作:
link:{stubrunner_core_path}/src/test/groovy/org/springframework/cloud/contract/stubrunner/junit4/StubRunnerRuleCustomPortJUnitTest.java[role=include]
对于前面的示例,以下测试有效:
link:{stubrunner_core_path}/src/test/groovy/org/springframework/cloud/contract/stubrunner/junit4/StubRunnerRuleCustomPortJUnitTest.java[role=include]
Stub Runner with Spring
带 Spring 的 Stub Runner 会设置 Stub Runner 项目的 Spring 配置。
通过在配置文件中提供一个 Stub 列表,Stub Runner 会自动下载并 WireMock 中注册选定的 Stub。
如果你希望查找 Stub 依赖项的 URL,你可以自动装入 StubFinder
接口并使用它的方法,如下所示:
link:{stubrunner_core_path}/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/StubRunnerConfigurationSpec.groovy[role=include]
这样做取决于以下配置文件:
link:{stubrunner_core_path}/src/test/resources/application-test.yml[role=include]
除了使用属性,你还可以使用 @AutoConfigureStubRunner
中的属性。以下示例通过在注释中设置值来实现相同的结果:
link:{stubrunner_core_path}/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/consul/StubRunnerSpringCloudConsulAutoConfigurationSpec.groovy[role=include]
Stub Runner Spring 以下述方式为每个已注册的 WireMock 服务器注册环境变量。以下示例展示了 com.example:thing1
和 com.example:thing2
的 Stub Runner ID:
-
stubrunner.runningstubs.thing1.port
-
stubrunner.runningstubs.com.example.thing1.port
-
stubrunner.runningstubs.thing2.port
-
stubrunner.runningstubs.com.example.thing2.port
你可以在你的代码中引用这些值。
你还可以使用 @StubRunnerPort
注释来注入正在运行的 Stub 的端口。此注释的值可以是 groupid:artifactid
或者仅是 artifactid
。以下示例展示了 com.example:thing1
和 com.example:thing2
的 Stub Runner ID。
@StubRunnerPort("thing1")
int thing1Port;
@StubRunnerPort("com.example:thing2")
int thing2Port;