首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jmockit MockUp<Paths> mockit.internal.ClassFile$NotFoundException

jmockit MockUp<Paths> mockit.internal.ClassFile$NotFoundException
EN

Stack Overflow用户
提问于 2016-09-28 22:26:26
回答 2查看 1.6K关注 0票数 0

我有一个junit测试,试图使用Paths.get(String pathStr)和@Mock Path get(String pathStr)来伪造MockUp(字符串pathStr),后者返回@模拟路径路径;在JMockit 1.23和1.22中,这很好,但是从JMockit 1.24开始,最多1.28,它抛出一个mockit.internal.ClassFile$NotFoundException,它引用的类也是TestClassName$2

代码语言:javascript
复制
    new MockUp<Paths>() {
        @Mock
        public Path get(String first, String... more) {
            return path;
        }
    };

JMockit的每一次更新似乎都删除了功能,但我真的不知道这里的主要缺点是什么。

更新:我现在知道MockUp是一个红鱼,问题是期望值块不是作为匿名内部类创建的。我不知道为什么。

更新:复制代码:

代码语言:javascript
复制
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))));
    }

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-29 20:38:03

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

代码语言:javascript
复制
@Test
public void issue350Reproducer(@Mocked File file) {
    new MockUp<Runnable>() {};
}

因此,Expectations的使用是不相关的。实际的bug是在模仿File

票数 2
EN

Stack Overflow用户

发布于 2021-08-26 08:27:16

不要在任何测试方法之外使用@ outside文件,请像下面这样使用本地模拟

代码语言:javascript
复制
   @Test
    public void yourMethodName(@Mocked File file) {
        new MockUp<Runnable>() {
{
         b;
         result=file;
}
    };
    }
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39758615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档