代码之家  ›  专栏  ›  技术社区  ›  SaÅ¡a

如何在使用(Power)Mockito初始化类时模拟私有静态方法的静态调用?

  •  1
  • SaÅ¡a  · 技术社区  · 7 年前

    它是这样的:

    class BadDesignedClass {
        public static final Properies = loadProperties();
        private static Properties loadProperties() {
            // ... loads non-existent property file and crashes...
        }
    }
    

    2 回复  |  直到 7 年前
        1
  •  1
  •   SpaceTrucker    7 年前

    在不初始化类的情况下加载该类(有关详细信息,请参阅 this answer ). 然后 loadProperties 不会被呼叫。这可以通过以下方法实现。

    Class<?> clazz = Thread.currentThread().getContextClassLoader()
        .loadClass("org.example.BadDesignedClass");
    

    然后你可以通过 clazz

        2
  •  0
  •   SaÅ¡a    7 年前

    为了得到完整的解决方案,我将在这里展示我所做的一切,灵感来自SpaceTrucker的建议:

    第一

    Class<?> clazz = Thread.currentThread().getContextClassLoader()
            .loadClass("org.example.BadDesignedClass");
    

    第二 :抑制产生所有问题的静态方法。

    PowerMockito.suppress(PowerMockito.method(clazz , "loadProperties"));
    

    loadProperties() 现在被抑制。

    PowerMockito.mockStatic(BadDesignedClass.class);
    PowerMockito.when(BadDesignedClass.someMethod()).thenReturn("something");