如何在 Java 中模拟静态方法?

How to mock static method in Java?(如何在 Java 中模拟静态方法?)
本文介绍了如何在 Java 中模拟静态方法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

限时送ChatGPT账号..

我有一个类 FileGenerator,我正在为 generateFile() 方法编写一个测试,该方法应该执行以下操作:

I have a class FileGenerator, and I'm writing a test for the generateFile() method that should do the following:

1) 它应该调用 BlockAbstractFactory

2) 它应该从子类方法 getBlocks()

2) it should populate variable blockList from the subclass method getBlocks()

3) 它应该调用一个静态方法 createFile 从一个最终的帮助类 FileHelper 传递一个字符串参数

3) it should call a static method createFile from a final helper class FileHelper passing a String parameter

4) 它应该调用blockList中每个BlockController的run方法

4) it should call the run method of each BlockController in the blockList

到目前为止,我有这个空方法:

So far, I have this empty method:

public class FileGenerator {
    // private fields with Getters and Setters

    public void generateBlocks() {
    }
}

我正在使用 JUnit、Mockito 来模拟对象,并且我已经尝试使用 PowerMockito 来模拟静态类和最终类(Mockito 不这样做).

I am using JUnit, Mockito to mock objects and I've tried using PowerMockito to mock static and final classes (which Mockito doesn't do).

我的问题是:我的第一个测试(从 BlockAbstractFactory 调用方法 getBlockList())正在通过,即使 generateBlocks().我已经在 BlockAbstractFactory 中实现了静态方法(目前返回 null),以避免 Eclipse 语法错误.

My problem is: my first test (calling method getBlockList() from BlockAbstractFactory) is passing, even though there is no implementation in generateBlocks(). I have implemented the static method in BlockAbstractFactory (returning null, so far), to avoid Eclipse syntax errors.

如何测试静态方法是否在 fileGerator.generateBlocks() 中被调用?

How can I test if the static method is called within fileGerator.generateBlocks()?

到目前为止,这是我的测试课:

Here's my Test Class, so far:

@RunWith(PowerMockRunner.class)
public class testFileGenerator {
    FileGenerator fileGenerator = new FileGenerator();

    @Test
    public void shouldCallGetBlockList() {
            fileGenerator.setFileType(FileTypeEnum.SPED_FISCAL);

            fileGenerator.generateBlocks();

            PowerMockito.mockStatic(BlockAbstractFactory.class);
            PowerMockito.verifyStatic();
            BlockAbstractFactory.getBlockImpl(fileGenerator.getFileType());
    }
}

推荐答案

我没有使用 PowerMock 的经验,但是由于您还没有得到答案,所以我只是在阅读文档以查看是否可以帮助您有点在路上.

I have no experience with PowerMock, but since you didn't get an answer yet I'm just been reading through the documentation to see if I can help you a bit on your way.

我发现您需要准备 PowerMock,以便我知道它需要准备哪些静态方法才能被模拟.像这样:

I found that you need to prepare PowerMock so that I knows which static methods it needs to prepare to be mocked. Like so:

@RunWith(PowerMockRunner.class)
@PrepareForTest(BlockAbstractFactory.class) // <<=== Like that
public class testFileGenerator {
    // rest of you class
}

这里您可以找到更多信息.

这有帮助吗?

这篇关于如何在 Java 中模拟静态方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

How to send data to COM PORT using JAVA?(如何使用 JAVA 向 COM PORT 发送数据?)
How to make a report page direction to change to quot;rtlquot;?(如何使报表页面方向更改为“rtl?)
Use cyrillic .properties file in eclipse project(在 Eclipse 项目中使用西里尔文 .properties 文件)
Is there any way to detect an RTL language in Java?(有没有办法在 Java 中检测 RTL 语言?)
How to load resource bundle messages from DB in Java?(如何在 Java 中从 DB 加载资源包消息?)
How do I change the default locale settings in Java to make them consistent?(如何更改 Java 中的默认语言环境设置以使其保持一致?)