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

如何防止Mockito嘲笑...动态?

岳俊晖
2023-03-14

这是这个问题的后续问题。

我的问题是:我将我们的环境升级到了JUnit、Mockito的较新版本……不幸的是,我是用最新的IBM JRE运行本地测试的。然后我们发现,在我们的构建环境中,我们所有的Mockito测试现在都失败了

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doAnswer;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;

import org.junit.Assume;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.junit.MockitoJUnitRunner;
import org.mockito.stubbing.Answer;

class Helper {
    public static void forceJUnitToIgnoreTestForJava8SR1() {
        Assume.assumeFalse("Ignoring test when running with JRE SR1", isJava8SR1());
    }

    private static boolean isJava8SR1() {
        String fullVersion = System.getProperty("java.fullversion", "");
        return fullVersion.contains("R28_Java8_SR1");
    }
}

@RunWith(MockitoJUnitRunner.class)
public class Mcve {

    @Mock
    private ExecutorService service;

    @Before
    public void setup() {
        Helper.forceJUnitToIgnoreTestForJava8SR1();

        // make the mcve do something
        doAnswer(new Answer<Future<?>>() {
            @Override
            public Future<?> answer(InvocationOnMock invocation) throws Throwable {
                return null;
            }
        }).when(service).submit(any(Runnable.class));
    }

    @Test
    public void test() {
        System.out.println("won't show up ;-(");
    }
}

共有1个答案

柳涵意
2023-03-14

直接调用MockitoAnnotations.initMocks(this),而不是使用MockitoJunitRunner:

public class Mcve {

    @Mock
    private ExecutorService service;

    @Before
    public void setup() {
        Helper.forceJUnitToIgnoreTestForJava8SR1();
        MockitoAnnotations.initMocks(this);
        ...
    }

    @Test
    public void test() {
        System.out.println("won't show up ;-(");
    }
}
 类似资料:
  • 当我试图模仿javax.ws.rs.core 时,我得到一条错误消息: 无法创建JAX-RS运行时委托 为什么会发生这种情况? 但是,当我试图嘲笑HttpServlet响应时,这是没有问题的!

  • 我提到了这个答案,我该如何模拟java。时间本地日期。now()关于如何模拟我的LocalDateTime。now()调用。我基本上遵循了所有步骤,但只使用了LocalDateTime而不是LocalDate。 我的代码的功能是这样的,它应该只在一小时的第15或45分钟运行。因此,我将LOCAL\u DATE\u TIME静态变量设置为: 然后在我的@Before测试方法中,我有以下内容: 这是2

  • 我想在我的发票类中存根methot generateFerenceNumber():

  • 包括StackTrace。我尝试用这个when(requestBodySpec.body(any())替换body mock。然后返回(requestHeadersSpec);也但是没有用。我认为问题在于模仿单声道。只是反对。不确定可能是什么问题。如果有不同的方法来模拟单声道。请分开反对并通过,请让我知道。

  • 由于各种原因,我的单元测试环境无法访问启动ignite所需的环境。我不需要ignite来启动测试,我希望代码忽略对ignite的调用。开始()。我该怎么做? 我尝试过模拟点火,但当我尝试模拟start()方法时,它会抛出一个错误。 这会导致以下错误: 组织。莫基托。例外情况。误用。MissingMethodInvocationException:when()需要的参数必须是“模拟的方法调用”。例如

  • 问题内容: 我在带有打字稿的React Router v5.1.2中使用UseHistory挂钩吗?运行单元测试时,我遇到了问题。 TypeError:无法读取未定义的属性“ history”。 我也尝试使用,但仍然无法正常工作。 问题答案: 浅化使用的反应功能组件时,我需要相同的内容。 在我的测试文件中解决了以下模拟问题: