当前位置: 首页 > 面试题库 >

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

江浩慨
2023-03-14
问题内容

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

1)它应该调用静态方法getBlockImpl(FileTypeEnum)BlockAbstractFactory

2)它应该blockList从子类方法填充变量getBlocks()

3)它应该createFileFileHelper传递String参数的最终帮助器类中调用静态方法

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

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

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

    public void generateBlocks() {
    }
}

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

我的问题是:即使没有中的实现,我的第一个测试(getBlockList()从调用方法BlockAbstractFactory)也通过了generateBlocks()。我已经实现了static方法BlockAbstractFactory(到目前为止,返回null),以避免Eclipse语法错误。

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

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

@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的经验,但是由于您还没有得到答案,因此我一直在阅读文档,以了解我是否可以在您的帮助中有所帮助。

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

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

在这里您可以找到更多信息。

有帮助吗?



 类似资料:
  • 模拟由某个类实现的接口方法很容易,但如果有一个类并且有一个静态方法,那么我们如何借助easymock对其进行模拟呢?? supose是一个a类,有一个void retruned方法作为公共静态void methodA(一些参数…){} 我们如何在EasyMock的帮助下模仿A的方法methodA

  • 我试图用Kotlin中的jMockit模拟一个静态方法: 但我得到以下错误:

  • 我试图在静态方法中模拟静态方法。 我想知道不使用任何框架是否可能。 有没有办法达到我的目的?

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

  • 错误:org.mockito.exceptions.misusing.missingMethodInvocationException:when()需要一个参数,该参数必须是“mock上的方法调用”。例如:when(mock.getArticles()).thenreturn(articles); 此外,此错误可能会出现,因为:1。您可以存根:finall/private/equals()/has

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