Essayez de bouchonner android classe d'activité en utilisant PowerMockito lance RuntimeException « Stub! »

StackOverflow https://stackoverflow.com/questions/3739737

Question

J'ai trouvé cette exemple où ils ont utilisé PowerMock et EasyMock à talon / railler le menu et mENUITEM cours pour Android. Je suis en train de faire quelque chose de similaire avec PowerMock et Mockito avec la classe d'activité.

Je comprends que beaucoup de méthodes sont définitives et que dans le Android.jar tous simplement jeter RuntimeException ( « Stub! »).

Je comprends également que ce test n'est pas complète mais je ne vouloir voir s'il est possible de se moquer de la classe d'activité androïde.

Mais étant donné que PowerMock permet aux classes simulées avec des méthodes finales ne devraient pas ce travail de code?

@RunWith(PowerMockRunner.class)
@PrepareForTest(Activity.class)
public class MyTestCase extends TestCase {

    public void testPlease_JustWork() throws Exception {
        Activity mockActivity = PowerMockito.mock(Activity.class);

        PowerMockito.when(mockActivity.getTitle()).thenReturn("Title");
    }
}

Je pense que le RuntimeException ne se produirait plus et « Titre » serait retourné, mais il jette encore l'exception.

J'ai essayé toutes sortes de choses différentes comme doReturn("Title").when(mockActivity).getTitle(); et suppress(constructor(Activity.class));

Ai-je fait quelque chose de mal ou est-ce pas possible?

Était-ce utile?

La solution

Je viens d'essayer votre exemple de code et il fonctionne ici, étrange. J'ai téléchargé PowerMock 1.4.5 avec Mockito et JUnit, y compris les dépendances et utilisé le android.jar du sdk (2.2). Il échoue uniquement à l'exception si je supprime le @PrepareForTest.

EDIT

Vous pouvez utiliser le android.jar avec le code d'exception enlevé, prévu dans l'article que vous avez mentionné.

Autres conseils

Probablement pas une réponse directe à votre question, mais vous pouvez essayer Robolectric afin de tester parties de votre application Android sur votre PC.

Roboelectric évite le Stub! exception et vous donne une minimum Classes Android mise en œuvre

Je pense que la réponse est que l'ordre de vos questions bibliothèques référencées parce que le android.jar comprend des talons pour JUnit.

Vous devez vous assurer que votre projet de test, si vous allez à « propriétés », puis « chemin de génération Java » que le pot de JUnit associé à la version complète de powermock que vous avez téléchargés apparaissent sur l'onglet « Ordre et Export » ci-dessus la android.jar. Dans le cas contraire, le système résout les paquets de junit.framework et junit.runner de android.jar avant qu'elle ne les résout du junit.jar inclus dans powermock.

Je me rends compte de cette question est vieux, mais je pense que c'est la bonne réponse, donc je voulais vous assurer de documenter sur la question.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top