powermock 错误 java.lang.Linkage错误: 加载程序约束冲突: 解析方法"android.support.v4.app



我正在使用powermock测试和Android活动

@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21)
@PowerMockIgnore({ "org.mockito.*", "org.robolectric.*", "android.*"})
@PrepareForTest(EpicDetailFragment.class)
public class ITestActivityTest {
    private ITestDemoActivity activity;
    private FragmentManager fm;
    @Rule
    public PowerMockRule rule = new PowerMockRule();
    @Before
    public void initSetup(){
        activity = Robolectric.buildActivity(IGDemoActivity.class).create().get();
        fm = activity.getSupportFragmentManager();
        assertTrue(activity != null);
    }
 
}

无论如何,我得到以下链接错误

java.lang.LinkageError: loader constraint violation: when resolving method "android.support.v4.app.FragmentTransaction.add(ILandroid/support/v4/app/Fragment;Ljava/lang/String;)Landroid/support/v4/app/FragmentTransaction;" the class loader (instance of org/powermock/core/classloader/MockClassLoader) of the current class, com/pips/ftse/igdemo/activities/IGDemoActivity, and the class loader (instance of org/robolectric/internal/bytecode/InstrumentingClassLoader) for the method's defining class, android/support/v4/app/FragmentTransaction, have different Class objects for the type android/support/v4/app/Fragment used in the signature

你知道这是怎么回事吗?怎么解决?

我以为忽略android.*可能会起作用,但它不起作用。

这个错误意味着,一个类及其父类由不同的类加载器加载。当从子类实例调用超类中的方法时,由于类对象实例不同,无法链接(使用)该方法。

您有这个错误,因为"android.*"被添加到@PowerMockIgnore中,但您正在尝试准备测试类EpicDetailFragment,它显然扩展了android.support.v4.app.FragmentTransaction

该怎么办?尝试从忽略中删除"android.*",并尝试使用更具体的路径来忽略无法通过PowerMock重新加载的android部分。此外,我建议尝试使用@PowerMockRunnerDelegate,而不是使用规则。

最新更新