2010-08-06 6 views
2

Donc, je suis nouveau pour les tests unitaires Android. Je suis en train d'écrire un test unitaire pour l'application Téléphone:Android app unit test

package com.android.phone; 

import android.content.Intent; 
import android.net.Uri; 
import android.test.ApplicationTestCase; 
import android.test.suitebuilder.annotation.MediumTest; 

import com.android.phone.PhoneApp; 

import dalvik.annotation.TestTargetClass; 

@TestTargetClass(PhoneApp.class) 
public class TestPhone extends ApplicationTestCase<PhoneApp> { 

     public TestPhone() { 
       super(PhoneApp.class); 
     } 

     private PhoneApp phone; 

     @Override 
     protected void setUp() throws Exception { 
       super.setUp(); 
       phone = getApplication(); 
     } 

     @MediumTest 
     public void testDialerIsUp() { 
       assertNotNull("Phone app does not exist", phone); 
       // TODO add tests 
     } 

} 

Ensuite, je commence un émulateur, attendez jusqu'à ce qu'il démarre, et exécuter ces tests:

adb shell am instrument -e class com.android.phone.TestPhone -r -w com.android.phone.tests/android.test.InstrumentationTestRunner 

Et maintenant, je suis obtenir un junit.framework.AssertionFailedError: PhoneApp does not exist. Quel est le problème ici, pourquoi PhoneApp n'est pas?

Répondre

0

Vous n'affichez pas le code de votre PhoneApp. Avez-vous dérivé une classe PhoneApp de la classe android.app.Application? Ou vous attendez qu'il y ait juste quelque chose appelé PhoneApp là-bas que vous pouvez tester?

Vous devrez écrire une classe android.app.Application dans le cadre de votre projet, si vous souhaitez tester quelque chose.

Ou, peut-être, vous parlez de quelque chose que je ne comprends pas. C'est toujours possible.

+0

Cette application est une partie de la plate-forme Android. – folone

+0

Il peut être trouvé, par exemple, ici: http://www.netmite.com/android/mydroid/packages/apps/Phone/src/com/android/phone/PhoneApp.java – folone

0

Comment cela peut-il même compiler avec "PhoneApp.class" si vous vous en tenez au SDK?

Je sais que vous pouvez utiliser Robotium pour tester des applications existantes.

+0

Je ne me contente pas de le SDK. J'ai toutes les sources de la plateforme. – folone

2

En fait, je vous recommande d'appeler createApplication() dans votre méthode setUp() avant d'appeler phone = getApplication().

0

Élaborant sur la réponse de Karim (il ne fonctionne pas), c'est la méthode d'installation:

MyApplication application; 

    @Override 
    protected void setUp() throws Exception { 
      super.setUp(); 
      createApplication(); 
      application = getApplication(); 
    } 
Questions connexes