2016-08-31 1 views
0

J'ai une application Android simple avec quelques tests d'expresso. Je veux écrire une classe de base pour que toutes mes classes de test héritent de ses méthodes @beforeClass et @afterClass, mais le problème est que lorsque je le fais comme l'exemple de code ci-dessous, JUnit ne voit aucun test sur al. J'ai reçu le message Empty test suite.. Quel est le problème?JUnit android test classinheritance

Exemple de code:

public class RealmTest { 
    protected static Realm realm; 

    @BeforeClass 
    public static void beforeClass() { 
     realm = Realm.getDefaultInstance(); 
     realm.setAutoRefresh(true); 
    } 

    @AfterClass 
    public static void afterClass() { 
     realm.close(); 
    } 
} 

@RunWith(AndroidJUnit4.class) 
public class MainActivityTest extends RealmTest { 
    @Rule 
    public IntentsTestRule<MainActivity> activityTestRule = new IntentsTestRule<>(MainActivity.class); 

    @Test 
    public void startedFine() { 
     assertNotNull(realm); 
     onView(withId(R.id.button)).perform(click()); 
     intended(hasComponent(new ComponentName(getTargetContext(), EducationActivity.class))); 
    } 
} 

Si je vais exécuter tous les tests, les tests de MainActivityTest ne fonctionnera pas. Merci pour votre aide, veuillez dire si des informations supplémentaires sont nécessaires.

+0

Mettez ces deux méthodes dans MainActivityTest. Fonctionnent-ils – piotrek1543

+0

avez-vous configuré 'testInstrumentationRunner' dans votre fichier' app/build.gradle' – piotrek1543

Répondre

0

Deviner: l'environnement JUnit ne cherche pas statique méthodes. Alors peut-être vous simplement laisser tomber ce mot-clé de vos méthodes de base (devinez que vous pourriez garder votre royaume statique néanmoins, je suppose que vous voulez vraiment seulement un de ceux-ci).

Mais alors, une autre suggestion: n'utilisez pas l'héritage pour les cas de test.

Le point qui rend les cas de test précieux pour vous est: ils devraient vous permettre rapidement de trouver et corriger les bugs dans votre code de production. Mais quand votre "setup" est caché de vos testcases - parce que les choses ne se passent pas seulement dans une méthode @Before ... mais dans une méthode @Before quelque part, dans une classe différente ... eh bien, ça peut sérieusement augmentez le temps dont vous aurez besoin pour comprendre un cas de test défaillant. Parce que: au lieu de simplement étudier votre cas de test, vous vous retrouvez à creuser dans code de test afin de comprendre ce qui se passe exactement en plus de le code dans cette méthode de test défaillante elle-même!

Ainsi: être vraiment attention à équilibrer la "duplication de code" par rapport à "cas de test est facile à comprendre" aspects!

+0

il existe des méthodes statiques dans la classe de base car les méthodes annotées avec @ BeforeClass/@ AfterClass doivent être statiques car JUnit l'exige. Pour le reste, oui, merci, je suis d'accord avec vous, mais je voulais juste faire une simple initialisation ici en classe de base, donc je ne répéterai pas les mêmes lignes partout, gardant le code un peu propre et clair – AndreyS

+0

Ups; il y a trop longtemps que j'ai utilisé ce genre de choses! – GhostCat