5

静的メソッド内で静的メソッドをモックしようとしています。

フレームワークを使わなくても可能かしら。

以下は私が試したことです。

目標: 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()をオーバーライドできないと考えました......

私の目標を達成する方法はありますか?

4

1 に答える 1

4

1つの方法は、次の署名を変更することですrun

public static SomeObject run(ImageReader imageReader, String path) {
    // ...
于 2012-12-20T07:59:54.110 に答える