java - 为 WireMock 构建 Java 项目

标签 java mocking stubbing wiremock

我正在使用wiremock来模拟服务。使用 WireMock Standlone jar,我可以通过将 .json 文件放在 __files 文件夹中来运行我的模拟 api。

但是我想为 WireMock 创建一个 Java 项目。 WireMock 网站提供了入门片段。但我在基本项目设置方面遇到了一些挑战。

这是我遵循的步骤

  1. 在intellij中创建了一个gradle项目
  2. 添加了 WireMock 的 gradle 依赖项。这是我的 build.gradle

    dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    testCompile "com.github.tomakehurst:wiremock:2.17.0"
    }
    

3.使用以下代码创建了一个示例类,此代码来自 WireMock 网站

import com.github.tomakehurst.wiremock.WireMockServer;

import static com.github.tomakehurst.wiremock.client.WireMock.*;
import static 
     com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;

public class samplemock {

public static void main(String args[]){
    WireMockServer wireMockServer = new WireMockServer(options().port(9999));
    wireMockServer.start();
    stubFor(get(urlEqualTo("/test"))
            .willReturn(aResponse()
                    .withBody("Hello")));
}
}

但是,在执行此代码时,我在 ide 控制台中收到错误

Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/io/Resources
at com.github.tomakehurst.wiremock.core.WireMockConfiguration.<init>(WireMockConfiguration.java:58)
at com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig(WireMockConfiguration.java:104)
at com.github.tomakehurst.wiremock.core.WireMockConfiguration.options(WireMockConfiguration.java:108)
at com.tech.samplemock.main(samplemock.java:11)
 Caused by: java.lang.ClassNotFoundException: com.google.common.io.Resources
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 4 more

不确定为什么会发生此错误。除了 WireMock 中的一些代码片段之外,java 中没有任何可用的示例项目。提供了一个示例 Web 应用程序 here这对于构建普通的旧 javawiremock 框架没有太大帮助。

感谢您的支持。

谢谢。

最佳答案

要消除该错误,请尝试:

  • 通过在 build.gradle 文件中编译来替换 testCompile

    依赖项{ testCompile 组:'junit',名称:'junit',版本:'4.12' 编译“com.github.tomakehurst:wiremock:2.17.0” }

  • 在运行之前使用“gradle build”进行构建(或在 IDE 中执行任务)

无论如何,Wiremock 似乎忽略了您分配的端口。至少在我的执行中是这样。

更新: 我在启动服务器的行后面添加了 WireMock.configureFor("localhost",wireMockServer.port()); 并且它起作用了!

    import com.github.tomakehurst.wiremock.WireMockServer;
    import com.github.tomakehurst.wiremock.client.WireMock;

    import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
    import static com.github.tomakehurst.wiremock.client.WireMock.get;
    import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
    import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
    import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;


    public class SampleMock {

        public static void main(String args[]){

            WireMockServer wireMockServer = new WireMockServer(options().port(9999));
            wireMockServer.start();
            WireMock.configureFor("localhost", wireMockServer.port());

            stubFor(get(urlEqualTo("/test"))
                    .willReturn(aResponse()
                            .withBody("Hello")));

        }
    }

关于java - 为 WireMock 构建 Java 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50360276/

相关文章:

Java:抽象类中的静态字段

C++ : Is it possible to write Mock class for a class with parameterized constructor

uri - Wiremock 中的多值查询字符串

ruby-on-rails - stub ActiveRecord 结果数组

java - java.lang.CharSequence 类型无法在包声明中解析

java - 使用 AWS 开发工具包将文件上传到 S3

java - 内部没有抽象方法的抽象类

unit-testing - 如何在golang中模拟方法以通过测试

eclipse - 如何对 Eclipse 命令处理程序进行单元测试?

java - Mockito "when"的可能性