美文网首页
PowerMockRule踩坑

PowerMockRule踩坑

作者: 普通的程序员 | 来源:发表于2020-09-27 10:45 被阅读0次

    进行过单测的都知道,
    使用Mockito2.*版本的时候,会需要借助PowerMockito的mock static等功能。

    然后又因为需要mock Android环境,就又加上了robolectric的运行器。

    而恰巧这里有一个小兼容性问题。

    比如我们进行单测时,

    一个单测用例的生命周期是

    @before ---> @Test --->@after

    又因为before修饰的函数会每一次都运行,第一次运行又属其中最耗时的,

    这个时候我们的解决方案往往是,提取耗时操作到 @beforeclass

    @beforeClass的执行 是 早于 @before,且执行一次的。

    那我们可以做一个init singleton 初始化单例的方式,在beforeClass里进行调用。

    以上看似没有问题。

    但是一旦加入了

    @Rule
    PowerMockRule
    

    可能会出现NPE的问题。

    原因是

    robolectric 在运行到@beforeClass的时候,运行器的classLoader还是 AndroidSandBoxClassLoader

    由于PowerMockRule的存在

    会导致@before,@Test等方法,都是运行在 javaAssistClassLoader里


    有兴趣的可以单步跟进

    两个不同的classLoader,以至于设想的BeforeClass里init 单例的方案无法实现。

    如果不需要使用robolectric ,或者不需要使用Powermock,该方案work。

    相关文章

      网友评论

          本文标题:PowerMockRule踩坑

          本文链接:https://www.haomeiwen.com/subject/supkuktx.html