当前位置: 首页 > 知识库问答 >
问题:

如何在静态方法中模拟对象?

孟修竹
2023-03-14

我试图在静态方法中模拟静态方法。

我想知道不使用任何框架是否可能。

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;
  }
}
 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();
      }
  }
class MockFoo {
    @Override
    public static getImageReader() {
        return MockReader();
    }
}
public void TestRun() {

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

}

有没有办法达到我的目的?

共有1个答案

黄鸣
2023-03-14

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

public static SomeObject run(ImageReader imageReader, String path) {
    // ...
 类似资料:
  • 问题内容: 我有一个类,我正在为应该执行以下操作的方法编写测试: 1)它应该调用静态方法上 2)它应该从子类方法填充变量 3)它应该从传递String参数的最终帮助器类中调用静态方法 4)它应该在blockList中调用每个的run方法 到目前为止,我有这个空方法: 我正在使用JUnit,Mockito来模拟对象,并且尝试使用PowerMockito来模拟静态类和最终类(Mockito不能这样做)

  • 模拟由某个类实现的接口方法很容易,但如果有一个类并且有一个静态方法,那么我们如何借助easymock对其进行模拟呢?? supose是一个a类,有一个void retruned方法作为公共静态void methodA(一些参数…){} 我们如何在EasyMock的帮助下模仿A的方法methodA

  • 我试图用Kotlin中的jMockit模拟一个静态方法: 但我得到以下错误:

  • 错误:org.mockito.exceptions.misusing.missingMethodInvocationException:when()需要一个参数,该参数必须是“mock上的方法调用”。例如:when(mock.getArticles()).thenreturn(articles); 此外,此错误可能会出现,因为:1。您可以存根:finall/private/equals()/has

  • 问题内容: 我正在寻找测试以下静态方法(特别是使用Doctrine模型)的最佳方法: 理想情况下,我将使用模拟对象来确保调用了“ fromArray”(具有提供的用户数据)和“ save”,但这是不可能的,因为该方法是静态的。 有什么建议么? 问题答案: PHPUnit的作者Sebastian Bergmann最近发表了一篇有关Stubbing和Mocking静态方法的博客文章。使用PHPUnit

  • 在安装到AEM 5.6.1实例之前,我正在使用maven构建和测试我的代码。我已经编写了单元测试,这些测试使用wcm的实现从aem模拟中获益。io和其他需要使用powermockito模拟静态方法的单元测试。 以下是我对aem上下文、sling Mock和powermock的maven依赖关系。 在我的课堂上,我正在为aem上下文设置规则,并准备一些用于模拟的静态类: 当我通过命令行运行mvn测试