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

如何轻松模拟出Java(jUnit4)中的静态方法

澹台胜
2023-03-14
问题内容

如何轻松模拟Java中的静态方法?

我正在使用Spring 2.5和JUnit 4.4

@Service
public class SomeServiceImpl implements SomeService {

    public Object doSomething() {
        Logger.getLogger(this.class); //a static method invoked.
        // ...
    }
}

我不控制服务需要调用的静态方法,因此 无法将其 重构为更可单元测试的。我以Log4J
Logger
为例,但实际的静态方法却类似。
不能更改静态方法。

在做Grails时,我习惯于使用类似这样的东西:

def mockedControl = mockFor(Logger)
mockControl.demand.static.getLogger{Class clazz-> … }
…
mockControl.verify()

我该如何在Java中做类似的事情?


问题答案:

基本上,在Java + Spring 2.5和JUnit 4.4中,目前尚没有简便的方法。

尽管可以重构和抽象出静态调用,但是重构代码并不是我一直在寻找的解决方案。

JMockit看起来可以工作,但是与Spring 2.5和JUnit 4.4不兼容。



 类似资料:
  • 问题内容: 我有一个类,我正在为应该执行以下操作的方法编写测试: 1)它应该调用静态方法上 2)它应该从子类方法填充变量 3)它应该从传递String参数的最终帮助器类中调用静态方法 4)它应该在blockList中调用每个的run方法 到目前为止,我有这个空方法: 我正在使用JUnit,Mockito来模拟对象,并且尝试使用PowerMockito来模拟静态类和最终类(Mockito不能这样做)

  • 模拟由某个类实现的接口方法很容易,但如果有一个类并且有一个静态方法,那么我们如何借助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

  • 本文向大家介绍轻松掌握Java状态模式,包括了轻松掌握Java状态模式的使用技巧和注意事项,需要的朋友参考一下 定义:在状态模式(State Pattern)中,类的行为是基于它的状态改变的。 特点: 1、封装了转换规则。 2、枚举可能的状态,在枚举状态之前需要确定状态种类。 3、将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。 4、允许状

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