Java com.github.tomakehurst.wiremock.client.VerificationException:的预期状态为201http://localhost:8080/__admin/mappings/new 但是是404

Java com.github.tomakehurst.wiremock.client.VerificationException:的预期状态为201http://localhost:8080/__admin/mappings/new 但是是404,java,mockito,junit4,wiremock,Java,Mockito,Junit4,Wiremock,这是我的测试课: public class CompanionDevicesRestServiceTest { public static ComDevicesRestService comDevicesRestService; public static IComDevices cdevicesService; public static ComDevices cdevicesRequest; @BeforeClass public static v

这是我的测试课:

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:的预期状态为201,但为404 位于com.github.tomakehurst.wiremock.client.HttpAdminClient.postJSONAssertoAndReturnBody(HttpAdminClient.java:156) 位于com.github.tomakehurst.wiremock.client.httpadmin.addStubMapping(httpadmin.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) 位于com.github.tomakehurst.wiremock.client.wiremock.stubFor(wiremock.java:69) com.charter.cdevices.rest.CompanionDevicesRestServiceTest.TestPostDevices(CompanionDevicesRestServiceTest.java:33) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(未知源) 在sun.reflect.DelegatingMethodAccessorImpl.invoke处(未知源) 位于java.lang.reflect.Method.invoke(未知源) 位于org.junit.runners.model.FrameworkMethod$1.runReflectVeCall(FrameworkMethod.java:47) 位于org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 位于org.junit.runners.model.FrameworkMethod.invokeeexplosive(FrameworkMethod.java:44) 位于org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 位于org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) 位于org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) 位于org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 位于org.junit.runners.ParentRunner$3.run(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) 位于org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 位于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) 位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)


您应该使用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")));

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

configureFor("localhost", 8080);

还可以使用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方法