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

Spring试验模拟静态方法全局

洪飞扬
2023-03-14

在Spring测试中,我知道我可以使用Mockito像模拟静态方法(通常是静态util方法:生成id,从Redis获取值):

try (MockedStatic) {
}

但是每种测试方法都要这样做又丑又麻烦,有什么办法可以做到这一切(我可以有一个单一的嘲笑行为)

我在想可能是junit5扩展,或者Mockito扩展,这似乎是一个常见的问题,我想知道是否有人尝试了一些成功的东西。

共有2个答案

西门梓
2023-03-14

您还可以在每个方法之前分别在所有测试中模拟@before。

public class Test {
    private MockedStatic<Files> filesMock;

    @BeforeEach
    public void init() {
        filesMock = org.mockito.Mockito.mockStatic(Files.class);
        filesMock.when(() -> Files.copy(any(Path.class), any(OutputStream.class))).thenReturn(1L);
    }

    @AfterEach
    public void teardown() {
        filesMock.close();
    }
    
    @Test
    void test() {
       // uses mock
    }
}

贾实
2023-03-14

试试这个

java prettyprint-override">public class StaticClassTest {

    MockedStatic<YourStatic> mockedStatic;

    @Before
    public void setup() {
        mockedStatic = Mockito.mockStatic(YourStatic.class);

        // if you want the same behavior all along.
        mockedStatic.when(() -> YourStatic.doSomething(anyString())).thenReturn("TEST");
    }
    
    @Test
    public void test_static() {
        // write your test here
    }


    @After
    public void teardown() {
        mockedStatic.close();
    }
}
 类似资料:
  • 我需要使用mockito测试handleIn()方法。 但是,代码需要调用这个遗留代码util.getContextPDO,它是一个静态方法。 注意,在测试环境中,这个util.getContextPDO总是返回异常,我打算通过始终返回一个虚拟IPDO来绕过这个util.getContextPDO()。 最初,我认为这可以通过使用类“MyClass”的spy()来实现,这样我就可以模拟getIPD

  • 在安装到AEM 5.6.1实例之前,我正在使用maven构建和测试我的代码。我已经编写了单元测试,这些测试使用wcm的实现从aem模拟中获益。io和其他需要使用powermockito模拟静态方法的单元测试。 以下是我对aem上下文、sling Mock和powermock的maven依赖关系。 在我的课堂上,我正在为aem上下文设置规则,并准备一些用于模拟的静态类: 当我通过命令行运行mvn测试

  • 问题内容: 我的代码中有一个静态方法,希望以某种方式进行模拟。 我正在使用jmock。 我想可以做到这一点的一种方法是在静态方法周围设置“包装类”并模拟该方法,但是我希望有一个更好的解决方案。 我要用这种错误的方式? 反馈: 我将要有一个接口和一个类,该接口和类具有一个仅称为静态方法的方法。这将允许我通过仅模拟对此包装器类的调用来模拟逻辑。(即使谈论它我也觉得很脏:)) 问题答案: 我们不支持在j

  • 例如,我有以下课程: 我有一个类使用她的方法: 测试等级: 尝试运行测试时遇到的错误: 组织。莫基托。例外情况。基础MockitoException:对于TesteStatico,静态模拟已在当前线程中注册以创建新的模拟,必须取消注册现有的静态模拟注册 项目中LIB的版本: junit-jupiter 5.5.2 mockito-junit-jupiter 3.2.14 mockito-内联3.2

  • 我在一个类中有一个静态方法。方法不是最终的。我一直得到一个when()需要一个参数,该参数必须是'a method call on a mock‘错误。下面是我的代码。

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