3
我試圖嘲笑靜態方法內的靜態方法。如何模擬靜態方法內的對象?
我不知道是否有可能沒有使用任何框架。
下面是我試過的。
目標:模擬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對象 然後調用讀的模擬版本()方法:
class MockFoo {
@Override
public static getImageReader() {
return MockReader();
}
}
這是我的測試代碼:
public void TestRun() {
MockFoo foo = new MockFoo();
foo.run();
}
然後我想我不能重寫靜態方法getImageReader()......
有沒有辦法達到我的目標?
+1。是的,我就是這麼做的。 –
我同意,這是我可以想到沒有框架的方式。謝謝你的提示! –