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 对象,然后调用模拟版本的 read() 方法:

class MockFoo {
    @Override
    public static getImageReader() {
        return MockReader();
    }
}

这是我的测试代码:

public void TestRun() {

    MockFoo foo = new MockFoo();
    foo.run();

}

然后我想我不能覆盖静态方法getImageReader()......

有没有办法实现我的目标?

4

1 回答 1

4

一种方法是更改​​ 的签名run

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