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

jmockit mockupmockit.internal.classfile$NotFoundException

上官兴昌
2023-03-14

我有一个junit测试,它试图使用MockUp()和@mock Path get(String pathStr)来伪造paths.get(String pathStr);在JMockit 1.23和1.22中,这很好,但从JMockit 1.24开始,直到1.28,它抛出了一个mockit.internal.ClassFile$NotFoundException,它引用的类也是TestClassName$2

    new MockUp<Paths>() {
        @Mock
        public Path get(String first, String... more) {
            return path;
        }
    };
package foo;

import mockit.Expectations;
import mockit.Mock;
import mockit.MockUp;
import mockit.Mocked;
import org.junit.Test;

import java.io.File;
import java.nio.file.Files;
import java.nio.file.LinkOption;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.Duration;

import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.IsEqual.equalTo;
import static org.junit.Assert.assertThat;

public class ReproJMockitBug {

    private Duration foo(File file, Path path, Duration duration) {
        final boolean exists = Files.exists(path);
        if (!exists && Paths.get("").equals(path)) {
            System.out.print(file.getAbsolutePath());
            return duration.plusMinutes(1);
        }
        return duration;
    }

    @Test
    public void shouldReturnErrorForInvalidFilePath(@Mocked Duration duration, @Mocked File file, @Mocked Path path) {
        String pathStr = "/some/test";

        new MockUp<Paths>() {
            @Mock
            public Path get(String first, String... more) {
                return path;
            }
        };

        new MockUp<Files>() {
            @Mock
            public boolean exists(Path path, LinkOption... options) {
                return false;
            }
        };

        new Expectations() {{
            onInstance(duration).plusMinutes(1);
            result = Duration.ofMinutes(3);
            onInstance(file).getAbsolutePath();
            result = pathStr;
        }};

        assertThat(foo(file, path, duration), is(equalTo(Duration.ofMinutes(3))));
    }

}

共有1个答案

葛桐
2023-03-14

下面是一个简单得多的复制器测试:

@Test
public void issue350Reproducer(@Mocked File file) {
    new MockUp<Runnable>() {};
}

因此,使用expectes是无关紧要的。真正的bug在于对文件的嘲弄。

 类似资料:
  • 问题内容: 我收到此异常: 异常堆栈跟踪指向适配器类中的此行: 这是我的适配器类: 这是我的POJO课: 问题答案: 您不小心调用了带有资源ID 的版本 。 您应该将其显式转换为:

  • 问题内容: 最近安装了最新的Eclipse ADT捆绑包之后,我在一个正在处理的旧项目中遇到了一些错误: 在我的R文件中,我要查找的字符串与资源ID之间存在正确的连接。 我尝试了几种方法来解决我的问题: 清理所有项目 将所有资源名称重命名为小写名称 重新启动电脑 我之前使用过“ adt-bundle-windows-x86_64-20130522”(编译时没有运行时错误),并下载了“ adt-bu

  • 问题内容: 我正在开发登录名,我想记下用户尝试登录的次数,因此每次尝试登录时,计数都会增加一…但是当我运行该活动时,此错误出现在我的活动中日志猫: , 有人可以帮我解决这个问题吗? 问题答案: 这是您的错误: 在你正试图在这里调用,是这需要作为第二个参数。有关更多信息,请参见此处。由于要打印计数值,因此必须将其转换为字符串。

  • 问题内容: 运行片段尝试显示对象的ListView时会发生此异常。我已经研究了该异常,但针对其他情况的解决方案似乎与“ setText”函数有关,或者其他任何尝试将除字符串以外的任何内容显示为字符串的问题。我真的不确定还有什么要说的。提前致谢! Java类 } XML布局 编辑(日志) 问题答案: 发现您的错误。它在您的IngAdapter中的以下行中 在此,第二个参数应该是资源名称,并且绝不能使

  • 问题内容: 我正在开发一个Android应用程序,该程序从MySQL数据库读取数据,但遇到了此错误。我有这个XML布局: 这是我的Java文件: 调用此Activity时,我收到以下错误消息: 我不知道如何解决此错误。 问题答案: 更改 至 有不同的版本-一种采用字符串,一种采用int资源ID。如果将其传递给整数,它将尝试查找相应的字符串资源ID-找不到它,这是你的错误。 我想返回一个整数。你需要

  • 所以当我不使用我的maven实现时,我在编译我的应用程序时遇到了麻烦。它将编译没有任何麻烦与maven-gwt-plugin。 我收到的错误表示生成器无法获取其请求的类信息: 显然,该类存在并在maven实现中工作。我不明白为什么在使用eclipse“Java应用程序”运行配置进行标准构建时它不起作用。以下是我的跑步配置的设置: 有人知道这是怎么回事吗?

  • 我正在开发一个从MySQL数据库读取数据的Android应用程序,我遇到了这个错误。我有这样的XML布局: 这是我的Java文件: 当调用此activity时,我收到以下错误消息: 我不知道如何修复这个错误。

  • 我创造了一个activity,在这个activity里,我有不同的碎片。在一个片段中,我想检查用户是否已登录,如果已登录显示一个布局,如果未登录显示另一个布局。 这是我做的,你能过来看看吗? 这是我得到的错误 E/AndroidRuntime:致命异常:主进程:#########,PID:562 Android.content.res.resourcesimpl.getValue(resource