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

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

问题描述

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

How do I easily mock out a static method in Java?

我正在使用 Spring 2.5 和 JUnit 4.4

I'm using Spring 2.5 and JUnit 4.4

@Service
public class SomeServiceImpl implements SomeService {

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

我不控制我的服务需要调用的静态方法,因此我无法将其重构为更易于单元测试.我以 Log4J Logger 为例,但真正的静态方法类似.改变静态方法不是一个选项.

I don't control the static method that my service needs to invoke so I cannot refactor it to be more unit-testable. I've used the Log4J Logger as an example, but the real static method is similar. It is not an option to change the static method.

做 Grails 工作,我习惯使用类似的东西:

Doing Grails work, I'm used to using something like:

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

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

How do I do something similar in Java?

推荐答案

基本上,在 Java + Spring 2.5 &目前是 JUnit 4.4.

Basically, There isn't an easy way to do this in Java + Spring 2.5 & JUnit 4.4 at the moment.

虽然可以重构并抽象出静态调用,但重构代码并不是我想要的解决方案.

Although it is possible to refactor, and abstract away the static call, Refactoring the code isn't the solution that I was looking for.

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

JMockit looked like it would work, but is incompatibile with Spring 2.5 and JUnit 4.4.

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

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Show progress during FTP file upload in a java applet(在 Java 小程序中显示 FTP 文件上传期间的进度)
How to copy a file on the FTP server to a directory on the same server in Java?(java - 如何将FTP服务器上的文件复制到Java中同一服务器上的目录?)
FTP zip upload is corrupted sometimes(FTP zip 上传有时会损坏)
Enable logging in Apache Commons Net for FTP protocol(在 Apache Commons Net 中为 FTP 协议启用日志记录)
Checking file existence on FTP server(检查 FTP 服务器上的文件是否存在)
FtpClient storeFile always return False(FtpClient storeFile 总是返回 False)