2010-09-17 18 views
9

J'ai trouvé ce example où ils ont utilisé PowerMock et EasyMock pour copier/masquer les classes Menu et MenuItem pour android. J'ai essayé de faire quelque chose de similaire avec PowerMock et Mockito avec la classe Activity.Tentative de remplacement de android Classe d'activité en utilisant PowerMockito throws RuntimeException "Stub!"

Je comprends que beaucoup de méthodes sont finales et que dans Android.jar, elles lancent simplement RuntimeException ("Stub!").

Je comprends également que ce test n'est pas complet mais je veux juste voir s'il est possible de se moquer de la classe android Activity.

Mais étant donné que PowerMock vous permet de simuler des classes avec des méthodes finales, ce code ne devrait-il pas fonctionner?

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

que je fais quelque chose de mal ou est-ce tout simplement pas possible?

Répondre

0

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

EDIT

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

+0

Je vais essayer ... – bytebender

+0

Pas de dés, pouvez-vous me montrer à quoi ressemblent vos lignes d'importation? – bytebender

+0

J'ai téléchargé l'ensemble du projet eclipse sur http://maik.0x2a.at/PowerMockTests.zip. Vous devrez peut-être adapter le chemin d'accès à android.jar – crazymaik

5

Probablement pas une réponse directe à votre question, mais vous pouvez essayer Robolectric afin de tester des parties de votre application Android sur votre PC. Roboelectric évite le Stub! exception et vous donne quelques minime mise en œuvre des classes Android

2

Je pense que la réponse est que l'ordre de vos bibliothèques référencées compte parce que le android.jar comprend des talons pour junit. Vous devez vous assurer que sur votre projet de test, si vous allez dans 'properties' et ensuite 'Java Build Path' que le jar junit associé à la version complète de powermock que vous avez téléchargé apparait sur 'Order and Export' onglet ci-dessus le android.jar. Si ce n'est pas le cas, le système résout les paquets junit.framework et junit.runner de android.jar avant de les résoudre à partir du fichier junit.jar inclus dans powermock. Je me rends compte que cette question est ancienne, mais je pense que c'est la bonne réponse, donc je voulais être sûr de le documenter sur la question.