2016-04-07 3 views
2

ich PowerMock bin mit zu testen und Android AktivitätPowerMock Fehler java.lang.LinkageError: loader Einschränkungsverletzung: wenn die Lösung Methode „android.support.v4.app

@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); 
    } 


} 

Auf jeden Fall bekomme ich die folgende LinkageError

java.lang.LinkageError: Lader-Constraint-Verletzung: beim Auflösen der Methode "android.support.v4.app.FragmentTransaction.add (ILandroid/support/v4/app/Fragment; Ljava/lang/String;) Landroid/support/v4/app/FragmentTransaction; "der Klassenlader (Instanz von org/powermock/core/classloader/MockClassLoader) der aktuellen Klasse, com/pips/ftse/igdemo/activities/IGDemoActivity und t Der Klassenlader (Instanz von org/robolectric/internal/bytecode/InstrumentingClassLoader) für die definierende Klasse der Methode, android/support/v4/app/FragmentTransaction, hat verschiedene Klassenobjekte für den in/usd verwendeten Typ android/support/v4/app/Fragment die Unterschrift

Irgendeine Idee worum es geht und wie man es löst?

Ich dachte, vielleicht ignorieren Android android. * Würde funktionieren, aber es nicht.

Antwort

0

Dieser Fehler bedeutet, dass eine Klasse und ihre Eltern von verschiedenen Klassenladern geladen werden. Wenn eine Methode der Superklasse von einer Kindklasseninstanz aufgerufen wird, kann eine Methode nicht verknüpft werden, da die Instanz des Klassenobjekts unterschiedlich ist.

Sie haben den Fehler, weil die "android. *" Zu @PowerMockIgnore hinzugefügt wird, aber Sie versuchen, bereiten Sie für Test die Klasse EpicDetailFragment vor, die offensichtlich android.support.v4.app.FragmentTransaction erweitert.

Was ist zu tun? Versuchen Sie, "Android. *" Von Ignorieren zu entfernen und versuchen Sie, bestimmte Pfade zu verwenden, um einen Teil von Android zu ignorieren, der nicht über PowerMock neu geladen werden kann. Auch ich würde empfehlen, zu versuchen, @PowerMockRunnerDelegate stattdessen Regeln zu verwenden.

Verwandte Themen