0
votes

Test de l'unité Disposition de l'onglet Android

Je suis nouveau dans les tests d'unités Android et essayant d'écrire quelques cas de test pour la disposition de l'onglet Android avec Robolectric . Je suis capable de vérifier le nombre d'onglets et des titres d'onglets. Mais je ne suis pas capable de vérifier du contenu dans des onglets. Quelqu'un peut-il m'aider à obtenir le contenu du fragment et à vérifier certains éléments dans cela?

Voici mon code xxx

tabadapter.getem (0) donne null valeur.

Merci d'avance.


2 commentaires

Duplicate Possible Stackoverflow.com/questions / 33811580 / ...


@Alexhart Merci pour la réponse. Le lien que vous avez partagé concerne les fragments normaux. Mais j'essaie d'obtenir le fragment d'un objet FragmentPagerAdapter qui est attaché à la disposition de l'onglet. Pourriez-vous s'il vous plaît vérifier ma question mise à jour avec mon code?


3 Réponses :


0
votes
import android.app.Activity;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import static junit.framework.Assert.*;

@RunWith(WithTestDefaultsRunner.class)
public class ViewPagerTest {

private ViewPager pager;
private TestPagerAdapter adapter;

@Before
public void setUp() throws Exception {
    pager = new ViewPager(new Activity());
    adapter = new TestPagerAdapter();
}

@Test
public void shouldSetAndGetAdapter() throws Exception {
    assertNull(pager.getAdapter());

    pager.setAdapter(adapter);
    assertSame(adapter, pager.getAdapter());
}

@Test
public void test_getAndSetCurrentItem() throws Exception {
    pager.setCurrentItem(2);
    assertEquals(2, pager.getCurrentItem());
}

@Test
public void setCurrentItem_shouldInvokeListener() throws Exception {
    TestOnPageChangeListener listener = new TestOnPageChangeListener();
    pager.setOnPageChangeListener(listener);
    assertFalse(listener.onPageSelectedCalled);
    pager.setCurrentItem(2);
    assertTrue(listener.onPageSelectedCalled);
}

private static class TestPagerAdapter extends PagerAdapter {
    @Override
    public int getCount() {
        return 0;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return false;
    }
}

private static class TestOnPageChangeListener extends ViewPager.SimpleOnPageChangeListener {
    public boolean onPageSelectedCalled;

    @Override
    public void onPageSelected(int position) {
        onPageSelectedCalled = true;
    }
}

6 commentaires

Merci pour la réponse. Mais je suis confronté à un problème tout en obtenant le contenu de l'adaptateur de pager de fragment qui est attaché à la disposition de l'onglet. J'ai mis à jour ma question avec mon code. Pourriez-vous s'il vous plaît vérifier maintenant?


@Kameswari J'avais mise à jour mon code avec un adaptateur de fragment Pager, pouvez-vous vérifier maintenant?


Merci beaucoup pour l'échantillon. Mais mes besoins sont de vérifier certains éléments de l'interface utilisateur dans le fragment. J'essaie de l'obtenir de l'adaptateur de pager. Mais je reçois une valeur null.


@ Kameswari J'ai compris votre exigence, vous devez configurer un pager et votre adaptateur à l'aide de l'échantillon ci-dessus, puis vous seul pouvez vérifier l'élément UI.


Pourriez-vous s'il vous plaît laissez-moi savoir quelle bibliothèque de grades je dois inclure pour obtenir com.xtremelabs.robolectric.WithTestDefaultSrunner Class?


com.xtremelabs.robolectric.WithTestDefaultSrunner sa propre classe Vous pouvez prendre Exple d'ici SearchCode.com/codeSearch/ Voir / 25270445 / #



0
votes

Je sais que ce n'est probablement pas la réponse que vous recherchiez, mais vous ne devriez pas écrire des tests d'unité normaux pour les classes / vues associées à Android. Ce que vous devriez faire, c'est écrire des tests d'unités instrumentées (ou vous pouvez appeler des tests d'interface utilisateur) qui s'exécute sur de vrais appareils Android (ou des émulateurs) dans lesquels vous avez accès aux classes associées à Android, à l'activité actuelle (contextuelle) d'éléments de vue sans faire d'astuces. Et le cadre, l'espresso rend vraiment facile d'exécuter un tel test.

Utilisation d'expresso, vous pouvez écrire P>

 onView(withId(thatWillOpenPageIWant)).perform(click())
onView(withId(R.id.search_hint_text_view)).check(matches(isDisplayed())) 


2 commentaires

Merci pour la réponse. J'ai essayé de mettre en œuvre un cas d'essai avec expresso et lorsque j'ai essayé de courir, son erreur de donner une erreur comme "java.lang.illegalstateException: aucune instrumentation enregistrée! Doit être exécuté sous une instrumentation enregistreuse." Pourriez-vous s'il vous plaît dites-moi comment le résoudre?


Cela peut arriver à cause de plusieurs raisons. Vous devriez demander à cela (de préférence chercher cela car il s'agit d'une erreur courante) avec votre fichier de grades. Je suppose que vous seriez essayé d'écrire votre test d'interface utilisateur dans le dossier de test, au lieu du dossier AndroidTest, vous obtenez donc cette erreur. Comme je l'ai dit dans mes tests d'interface utilisateur de réponse devrait être sous le dossier AndroidTest



0
votes

Ceci est mon code que j'ai écrit pour le test de l'unité A un ViewPager Code> ayant Fragments glacibles forts>. Il y a des classes personnalisées que j'ai faites pour mon programme mais qui ne sera pas un problème. Vous obtiendrez une idée assez solide pour continuer votre code:

ps. Ceci est un Test d'instrumentation . Ces tests sont essentiellement utilisés pour tester des fonctionnalités spécifiques android telles que UI et les classes comme ViewPager Code> (utilisé ici). P>

package com.example.onboardingfold.fragment.adapter;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;

import com.example.onboardingfold.fragment.OnboardingPage1Fragment;
import com.example.onboardingfold.fragment.OnboardingPage2Fragment;

public class MyCustomFragmentPagerAdapter extends FragmentPagerAdapter {

    // for storing the total number of pages in the viewPager
    private static int NUM_PAGES = 2;

    public MyCustomFragmentPagerAdapter(@NonNull FragmentManager fm) {
        super(fm);
    }

    // Returns the fragment to display for that particular page
    @NonNull
    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0: // Fragment # 0 - This will show OnboardingPage1Fragment
                return OnboardingPage1Fragment.newInstance(1);
            case 1: // Fragment # 1 - This will show SecondFragment
                return OnboardingPage2Fragment.newInstance(2);
            default:
                return null;
        }
    }

    // returns total number of pages
    @Override
    public int getCount() {
        return NUM_PAGES;
    }

    // returns the width of the page
    @Override
    public float getPageWidth(int position) {
        return super.getPageWidth(position);
    }
}


0 commentaires