静的メソッド内で静的メソッドをモックしようとしています。
フレームワークを使わなくても可能かしら。
以下は私が試したことです。
目標: 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オブジェクトを返すことができるようにしました。MockReaderオブジェクトは、read()メソッドのモックバージョンを呼び出します。
class MockFoo {
@Override
public static getImageReader() {
return MockReader();
}
}
これは私のテストコードです:
public void TestRun() {
MockFoo foo = new MockFoo();
foo.run();
}
次に、静的メソッドgetImageReader()をオーバーライドできないと考えました......
私の目標を達成する方法はありますか?