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

如何用mockito模拟一个静态方法?[副本]

呼延宪
2023-03-14
this is the class i want to mock
String buc = TrackerGenerator.getMetadataLocalThread().getIdUsuarioFinal();

这就是考验

 @Test
   public void serviceTest() {
   TrackerGenerator trackerGenerator = mock(TrackerGenerator.class);
 when(TrackerGenerator.getMetadataLocalThread().getIdUsuarioFinal()).thenReturn("0");
      TrackerGenerator.setMetadataLocalThread(new ThreadLocal<>());
}

共有1个答案

杜霍英
2023-03-14

由于静态方法属于类,所以在Mockito中没有办法模拟静态方法。但是,您可以使用PowerMock与Mockito框架一起模拟静态方法。

具有静态方法的简单类:

public class Utils {

    public static boolean print(String msg) {
        System.out.println(msg);

        return true;
    }
}

JUnit测试用例中使用Mockito和PowerMock的类测试模拟静态方法;

@RunWith(PowerMockRunner.class)
@PrepareForTest(Utils.class)
public class JUnit4PowerMockitoStaticTest{

    @Test
    public void test_static_mock_methods() {
        PowerMockito.mockStatic(Utils.class);
        when(Utils.print("Hello")).thenReturn(true);
        when(Utils.print("Wrong Message")).thenReturn(false);

        assertTrue(Utils.print("Hello"));
        assertFalse(Utils.print("Wrong Message"));

        PowerMockito.verifyStatic(Utils.class, atLeast(2));
        Utils.print(anyString());
    }
}
 类似资料:
  • 问题内容: 我已经写了一家工厂来生产物体: 我想验证传递给的参数,但不知道如何模拟静态方法。我在测试用例中使用的是和。有没有模拟或验证此特定用例的好方法? 问题答案: 在Mockito上使用PowerMockito。 示例代码:

  • 我正在尝试使用JUnit、Mockito和PowerMock验证对的调用。 下面是我的测试用例: 下面是测试中的代码: 非常有趣的是,这段代码失败时出现:

  • 我想为我的更改编写测试,但遇到了问题--更改是在静态方法内进行的。代码如下所示 我想要的是模拟方法A和B,并且doSomething和所有这些在方法C中使用的静态方法,但目前我找不到任何方法来做到这一点。你现在有吗?

  • 我有一个这样的方法。 > 如果我模拟记录器,是否必须将方法更改为post(字符串json,记录器记录器)?否则,如何使此模拟与该方法交互?

  • 我想通过ts-Mockito@2.5.0创建一个类的模拟对象,但我无法正确设置它。 以下是设计的测试用例: 正如测试用例所暗示的,我希望从我的模拟中返回“I AM mocked”的值。 我应该如何设置模拟,使其按预期工作? 旁白:这个测试用例只是为了展示我正在经历的奇怪行为。这不是我真正的测试。我想在不同服务的单元测试中使用模拟。)

  • 实际的方法是在第3行被调用()。我已经添加了和注释。 为什么调用实际方法?我也尝试了PowerMockito.do返回,但是得到了同样的问题。