我正在尝试在静态方法中模拟静态方法。
我想知道是否可以不使用任何框架。
以下是我尝试过的。
目标: 模拟 ImageIO 对象,以便我知道返回值的期望。
class Foo {
public static SomeObject Run(String path) {
File file = new File(path);
BufferedImage buff = ImageIO.read(file);
SomeObject some = new SomeObject(buff);
return some;
}
}
我首先尝试使用接口并为 ImageIO 创建一个包装器。
interface ImageReader {
public BufferedImage read(File file);
}
class RealReader implements ImageReader {
@Override
public BufferedImage read(File file) {
return ImageIO.read(file);
}
}
class MockReader implements ImageReader {
@Override
public BufferedImage read(File file) {
BufferedImage buff = new BufferedImage(0,0,0);
//do whatever I like here and return the buff
return buff;
}
}
class Foo {
public static SomeObject run(String path) {
File file = new File(path);
//ImageIO wrapper
ImageReader reader = getImageReader();
BufferedImage buff = reader.read(file);
SomeObject some = new SomeObject(buff);
return some;
}
public static getImageReader() {
return RealReader();
}
}
我试图覆盖静态 getImageReader() 以便我可以返回 MockReader 对象,然后调用模拟版本的 read() 方法:
class MockFoo {
@Override
public static getImageReader() {
return MockReader();
}
}
这是我的测试代码:
public void TestRun() {
MockFoo foo = new MockFoo();
foo.run();
}
然后我想我不能覆盖静态方法getImageReader()......
有没有办法实现我的目标?