当前位置: 首页 > 知识库问答 >
问题:

mockito3 mockConstruction能在“新文件”上生成存根吗

叶建柏
2023-03-14

我看到Mockito也支持模拟施工:

https://javadoc.io/static/org.mockito/mockito-core/3.11.2/org/mockito/Mockito.html#49https://rieckpil.de/mock-java-constructors-and-their-object-creation-with-mockito/

但是我不能在文件的构造上做存根:

try (MockedConstruction<File> ignored = Mockito.mockConstruction(File.class,
      (context) -> {
          Log.info("new file: {} in {},{},{}", context.getCount(), context.arguments(), context.constructor());
          return Mockito.withSettings().defaultAnswer(CALLS_REAL_METHODS);
       })) {
       File stub = new File("test");
}

它将为java.lang.StackOverflowError

at java.base/java.io.File.exists(File.java:816)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
at java.base/java.io.File.exists(File.java:816)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
at java.base/java.io.File.exists(File.java:816)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:642)

你知道如何模拟“新”文件类吗?

谢谢。

共有1个答案

羊舌高峰
2023-03-14

通过在测试中添加以下代码,我成功地运行了该程序:

 static class Foo implements Serializable, Comparable<Foo> {
    String method() {
        return "foo";
    }

    public int compareTo(Foo o) {
        return 0;
    }
}

@Test
void testFile() {
    try (MockedConstruction mocked = mockConstruction(Foo.class)) {
        Foo foo = new Foo();
        when(foo.method()).thenReturn("bar");
        assertEquals("bar", foo.method());
        verify(foo).method();
    }
    
    try (MockedConstruction<File> ignored = Mockito.mockConstruction(File.class,
            (context) -> {
                Log.info("new file: {} in {},{},{}", context.getCount(), context.arguments(), context.constructor());
                return Mockito.withSettings().defaultAnswer(CALLS_REAL_METHODS);
            })) {
        File stub = new File("test");
    }
}

恕我直言,莫基托/字节芽中的一个错误

 类似资料:
  • 我刚刚开始玩google proto。当我尝试编译proto java示例中的proto文件时,它不会生成任何grpc文件。 原型文件,https://github.com/grpc/grpc-java/blob/master/examples/src/main/proto/hello_world.proto 终端输出, rsonkhla@raman-OptiPlex-9020:~/sandbox

  • 问题内容: 我有一个兼容ejb-3的ejb,例如 我需要为此EJB生成存根。但我不想使用Websphere工具或Maven工具。有什么方法可以使用jdk生成存根吗? 创建远程客户端时 可以在weblogic或jboss中工作,但是在websphere中,即使是ejb 3,您也需要这样编写 在这种情况下,如果客户端不存在存根,它将抛出异常,这是一种使用Websphere ejb存根生成器工具生成存根

  • 我成功地从多个wsdlendpoint使用maven-jaxb2-plugin生成java类。 这是一次执行: 这里的问题是,我有多个执行,因此生成多个类,每个执行将类保存在不同的包中。 一个B类abiret2.java在多个包中生成(因此,它来自多个wdsls) 当我执行使用这个存根的代码时,例如在单元测试中,我会得到以下异常: 我发现了一些可能的修复方法,比如在args标记下添加配置 Arg,

  • Spring RestDocs可用于为具有Spring MockMvc或RestEasy的HTTP API生成文档(例如,asciidoctor格式)。在生成API文档的同时,还可以使用Spring Cloud Contract WireMock生成WireMock存根。只需编写正常的RestDocs测试用例,并使用@AutoConfigureRestDocs在restdocs输出目录中自动存储存

  • 问题内容: 使用该插件,我将创建一个文件并基于单击按钮生成下载。我想将文件保存到服务器上,而不是启动下载。因此,当单击按钮时,我希望将文件保存在: 我知道我需要使用将文件发布到服务器。但是,查看文档并没有看到对任何数据类型的支持。 我的代码: 基于此xml文档保存示例,我尝试了以下操作: 这将下载文件而不是保存文件。如何保存文件? 问题答案: 我设法使用来解决此问题,方法如下: upload.ph

  • 正如代码中所解释的那样,我需要这样做来防止连续两次更新项目照片的情况,因为第一次更新太快而无法完成上传。我最终得到了2个文件-其中一个没有从任何地方引用。如果我可以做类似的事情,第二次上传将转到我的“更新”情况(而不是这里提供的“新照片”情况)-在那里文件将被正确地切换。