2

这是我的测试课:

public class CompanionDevicesRestServiceTest {

    public static ComDevicesRestService comDevicesRestService;
    public static IComDevices cdevicesService;
    public static ComDevices cdevicesRequest;

    @BeforeClass
    public static void init(){
        cdevicesService = new StubComDevicesService();
        comDevicesRestService = new ComDevicesRestService(cdevicesService);
        cdevicesRequest = mock(ComDevices.class);
    }

    @Test
    public void testPostCdevices() throws JsonProcessingException{
        WireMock.stubFor(WireMock.post(WireMock.urlEqualTo("/cdevices"))
                  .withHeader("Accept", WireMock.equalTo("application/json"))
                   .willReturn(WireMock.aResponse()
                        .withStatus(200)
                        .withHeader("Content-Type", "application/json")
                        .withBody("Some content")));

    }
}

我收到以下错误:

com.github.tomakehurst.wiremock.client.VerificationException:http://localhost:8080/__admin/mappings/new的预期状态 201但在 com.github.tomakehurst.wiremock.client.HttpAdminClient.addStubMapping(HttpAdminClient.java:65) 在 com.github. tomakehurst.wiremock.client.WireMock.register(WireMock.java:138) 在 com.github.tomakehurst.wiremock.client.WireMock.register(WireMock.java:134) 在 com.github.tomakehurst.wiremock.client.WireMock。 givenThat(WireMock.java:65) at com.github.tomakehurst.wiremock.client.WireMock.stubFor(WireMock.java:69) at com.charter.cdevices.rest.CompanionDevicesRestServiceTest.testPostCdevices(CompanionDevicesRestServiceTest.java:33) at sun .reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl。在 org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) ) 在 org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) 在 org.junit.internal.runners 的 org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)。 statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) at org.junit .runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 在 org.junit.runners.ParentRunner$3。运行(ParentRunner.java:238)在 org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 在 org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 在 org.junit.runners。 ParentRunner.access$000(ParentRunner.java:53) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)在 org.junit.runners.ParentRunner.run(ParentRunner.java:309) 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 在 org.eclipse.jdt.internal.junit .runner.TestExecution.run(TestExecution.java:38) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 在 org.eclipse.jdt.internal.junit.runner。RemoteTestRunner.runTests(RemoteTestRunner.java:675) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main( RemoteTestRunner.java:192)

4

4 回答 4

2

对于这个例子,我想wiremock是从外部启动的,对吧?因此,您应该使用主机和端口添加配置:

configureFor("localhost", 8080);
于 2017-06-07T19:55:54.437 回答
1

您应该使用 WireMock 规则

@Rule
public WireMockRule wireMockRule = new WireMockRule();

然后你可以用它来创建你的存根

wireMockRule.stubFor(WireMock.post(WireMock.urlEqualTo("/cdevices"))
              .withHeader("Accept", WireMock.equalTo("application/json"))
               .willReturn(WireMock.aResponse()
                    .withStatus(200)
                    .withHeader("Content-Type", "application/json")
                    .withBody("Some content")));
于 2016-10-20T18:23:52.513 回答
1

也可以使用 ClassRule 注解:

public class CompanionDevicesRestServiceTest {

  public static ComDevicesRestService comDevicesRestService;
  public static IComDevices cdevicesService;
  public static ComDevices cdevicesRequest;


  @ClassRule
  public static WireMockClassRule wireMockRule = new WireMockClassRule(wireMockConfig()
    .containerThreads(20)
    .port(8080)
  );

  @BeforeClass
  public static void init(){
    cdevicesService = new StubComDevicesService();
    comDevicesRestService = new ComDevicesRestService(cdevicesService);
    cdevicesRequest = mock(ComDevices.class);
  }

  @Test
  public void testPostCdevices() throws JsonProcessingException{
    wireMockRule.stubFor(WireMock.post(WireMock.urlEqualTo("/cdevices"))
      .withHeader("Accept", WireMock.equalTo("application/json"))
      .willReturn(WireMock.aResponse()
        .withStatus(200)
        .withHeader("Content-Type", "application/json")
        .withBody("Some content")));

  }
}

并在类规则对象上调用 stubFor 方法。

于 2018-01-18T05:27:10.610 回答
0

根据WireMock 文档,我们有三种主要方法:JUnit 5.x、Junit4.x 和独立。

我的建议很简单:仔细检查哪种方法是您的,然后继续进行记录的建议,但是......

它从来没有为我工作过。为了解决这里讨论的问题,我做了以下事情:

  1. 在测试的最开始添加了一个@Rule。我将在这里分享整个类声明,包括跑步者和一个简短的 SSL 巫术,以使用 PowerMockRunner 运行这些东西:
    @RunWith(PowerMockRunner.class)  
    @PowerMockIgnore("javax.net.ssl.*")  
    public class StartingOddsChangesProviderIntegrationTest {  
    
    @Rule public WireMockRule wireMockRule = new WireMockRule();  
    (...)
  1. 您不需要实例化WireMockServer,也不需要添加 server.start()/stop() 行,因为 @Rule 注释已经存在。

最后,对应pom.xml文件中的WireMock依赖项如下:

    <dependency>
        <groupId>com.github.tomakehurst</groupId>
        <artifactId>wiremock-standalone</artifactId>
        <version>2.27.0</version>
        <scope>test</scope>
    </dependency>

我也尝试过wiremock-jre8 工件,但我最终遇到了同样的错误,所以我正在推进wiremock-standalone。

于 2021-12-27T23:38:41.550 回答