portaldacalheta.pt
  • Κύριος
  • Επιστήμη Δεδομένων Και Βάσεις Δεδομένων
  • Κατανεμημένες Ομάδες
  • Ευκίνητο Ταλέντο
  • Κερδοφορία & Αποδοτικότητα
Κινητό

Οδηγός δοκιμών Android: Δοκιμή μονάδας σαν ένα αληθινό πράσινο Droid



Οπως και έμπειροι προγραμματιστές εφαρμογών , καθώς οι εφαρμογές που αναπτύσσουμε ωριμάζουν, έχουμε το έντερο ότι είναι η ώρα να ξεκινήσουμε τις δοκιμές. Οι επιχειρηματικοί κανόνες συχνά υπονοούν ότι το σύστημα πρέπει να παρέχει σταθερότητα σε διαφορετικές εκδόσεις. Θέλουμε επίσης να αυτοματοποιήσουμε τη διαδικασία κατασκευής και να δημοσιεύσουμε την εφαρμογή αυτόματα. Για αυτό, χρειαζόμαστε εργαλεία δοκιμών Adnroid για να εγγυηθούμε ότι η κατασκευή λειτουργεί όπως αναμένεται.

Οι δοκιμές μπορούν να παρέχουν το επιπλέον επίπεδο εμπιστοσύνης για τα πράγματα που χτίζουμε. Είναι δύσκολο (αν όχι αδύνατο) να κατασκευαστεί ένα τέλειο προϊόν χωρίς σφάλματα. Επομένως, στόχος μας θα είναι να βελτιώσουμε τις πιθανότητες επιτυχίας μας στην αγορά με τη δημιουργία μιας δοκιμαστικής σουίτας που θα εντοπίζει γρήγορα νέα σφάλματα στην εφαρμογή μας.



Σεμινάριο δοκιμών Android



Όσον αφορά το Android και γενικά τις διάφορες πλατφόρμες για κινητά, η δοκιμή εφαρμογών μπορεί να είναι μια πρόκληση. Η εφαρμογή δοκιμών μονάδας και οι αρχές που ακολουθούν την ανάπτυξη που βασίζεται σε δοκιμές ή παρόμοιες μπορεί συχνά να είναι λιγότερο διαισθητικές. Ωστόσο, οι δοκιμές είναι σημαντικές και δεν πρέπει να θεωρούνται δεδομένες ή να αγνοούνται. Δαβίδ , Κεντ και Χελιδόνι έχουν συζητήσει τα οφέλη και τις παγίδες της δοκιμής σε μια σειρά συνομιλιών μεταξύ τους που συγκεντρώθηκαν σε ένα άρθρο με τίτλο « Είναι νεκρό το TDD; '. Μπορείτε επίσης να βρείτε τις πραγματικές συνομιλίες βίντεο εκεί και να λάβετε περισσότερες πληροφορίες αν η δοκιμή ταιριάζει στη διαδικασία ανάπτυξής σας και σε ποιο βαθμό θα μπορούσατε να την ενσωματώσετε, ξεκινώντας τώρα.



Σε αυτό το σεμινάριο δοκιμών Android θα σας καθοδηγήσω στη μονάδα και την αποδοχή, τον έλεγχο παλινδρόμησης στο Android. Θα επικεντρωθούμε στην αφαίρεση της μονάδας δοκιμών σε Android, ακολουθούμενη από παραδείγματα δοκιμών αποδοχής, με έμφαση στο να κάνουμε τη διαδικασία όσο το δυνατόν πιο γρήγορη και απλή για να συντομεύσουμε τους κύκλους ανατροφοδότησης προγραμματιστή-QA.

πώς να προσομοιώσετε το Μόντε Κάρλο

Πρέπει να το διαβάσω;

Αυτό το σεμινάριο θα διερευνήσει τις διάφορες δυνατότητες όσον αφορά τη δοκιμή εφαρμογών Android. Προγραμματιστές ή διαχειριστές έργων που θέλουν να κατανοήσουν καλύτερα τις τρέχουσες δυνατότητες δοκιμών της πλατφόρμας Android μπορούν να αποφασίσουν να χρησιμοποιήσουν αυτό το σεμινάριο εάν θέλουν να ακολουθήσουν οποιαδήποτε από τις προσεγγίσεις που αναφέρονται σε αυτό το άρθρο. Ωστόσο, δεν πρόκειται για ασημένια κουκκίδα, καθώς η συζήτηση που εμπλέκεται σε ένα τέτοιο θέμα διαφέρει εγγενώς από προϊόν σε προϊόν μαζί με προθεσμίες, ποιότητα κώδικα κώδικα, επίπεδο ζεύξης του συστήματος, προτίμηση προγραμματιστή στον σχεδιασμό αρχιτεκτονικής, προβλεπόμενη διάρκεια ζωής του χαρακτηριστικού σε δοκιμή κ.λπ.



Thinking in Units: Δοκιμή Android

Στην ιδανική περίπτωση, θέλουμε να δοκιμάσουμε μια λογική μονάδα / στοιχείο μιας αρχιτεκτονικής ανεξάρτητα. Με αυτόν τον τρόπο μπορούμε να εγγυηθούμε ότι το στοιχείο μας λειτουργεί σωστά για το σύνολο των εισροών που περιμένουμε. Οι εξαρτήσεις μπορούν να παραπλανηθούν, κάτι που θα μας επιτρέψει να γράψουμε δοκιμές που εκτελούνται γρήγορα. Επιπλέον, θα είμαστε σε θέση να προσομοιώσουμε διαφορετικές καταστάσεις συστήματος με βάση την παρεχόμενη είσοδο στο τεστ, καλύπτοντας εξωτικές θήκες στη διαδικασία.

Ο στόχος του Android δοκιμή μονάδας είναι να απομονώσετε κάθε μέρος του προγράμματος και να δείξετε ότι τα μεμονωμένα μέρη είναι σωστά. Ένα τεστ μονάδας παρέχει ένα αυστηρό, γραπτό συμβόλαιο που πρέπει να ικανοποιεί το κομμάτι του κώδικα. Ως αποτέλεσμα, προσφέρει πολλά οφέλη. —Βικιπαίδεια



Robolectric

Robolectric είναι ένα πλαίσιο δοκιμών μονάδων Android που σας επιτρέπει να εκτελείτε δοκιμές εντός του JVM στον σταθμό εργασίας σας. Η Robolectric ξαναγράφει τάξεις SDK Android καθώς φορτώνονται και τους επιτρέπει να τρέχουν σε κανονικό JVM, με αποτέλεσμα γρήγορους χρόνους δοκιμής. Επιπλέον, χειρίζεται τον πληθωρισμό των προβολών, τη φόρτωση πόρων και άλλα πράγματα που εφαρμόζονται στον εγγενή κώδικα C σε συσκευές Android, καθιστώντας την ανάγκη για εξομοιωτές και φυσικές συσκευές να εκτελούν αυτοματοποιημένες δοκιμές.

Μόκκιτο

Μόκκιτο είναι ένα πλαστό πλαίσιο που μας επιτρέπει να γράφουμε καθαρές δοκιμές στην Java. Απλοποιεί τη διαδικασία δημιουργίας δοκιμαστικών διπλών (mocks), τα οποία χρησιμοποιούνται για την αντικατάσταση των αρχικών εξαρτήσεων ενός στοιχείου / μονάδας που χρησιμοποιείται στην παραγωγή. Μια απάντηση στο StackOverflow συζητά για τις διαφορές μεταξύ των χλευασμάτων και των στελεχών με αρκετά απλούς όρους που μπορείτε να διαβάσετε για να μάθετε περισσότερα.



// you can mock concrete classes, not only interfaces LinkedList mockedList = mock(LinkedList.class); // stubbing appears before the actual execution when(mockedList.get(0)).thenReturn('first'); // the following prints 'first' System.out.println(mockedList.get(0)); // the following prints 'null' because get(999) was not stubbed System.out.println(mockedList.get(999));

Επιπλέον, με το Mockito μπορούμε να επαληθεύσουμε εάν έχει κληθεί μια μέθοδος:

// mock creation List mockedList = mock(List.class); // using mock object - it does not throw any 'unexpected interaction' exception mockedList.add('one'); mockedList.clear(); // selective, explicit, highly readable verification verify(mockedList).add('one'); verify(mockedList).clear();

Testdroid



Τώρα, γνωρίζουμε ότι μπορούμε να καθορίσουμε ζεύγη δράσης-αντίδρασης που καθορίζουν τι συμβαίνει όταν εκτελέσουμε μια συγκεκριμένη ενέργεια στο πλαστό αντικείμενο / στοιχείο. Επομένως, μπορούμε να παραπλανήσουμε ολόκληρες τις ενότητες της εφαρμογής μας και για κάθε δοκιμαστική περίπτωση να κάνουμε την πλαστή μονάδα να αντιδρά με διαφορετικό τρόπο. Οι διαφορετικοί τρόποι θα αντικατοπτρίζουν τις πιθανές καταστάσεις του δοκιμασμένου συστατικού και του πλαστού ζεύγους συστατικών.

Δοκιμή μονάδας

Σε αυτήν την ενότητα, θα αναλάβουμε την αρχιτεκτονική MVP (Model View Presenter). Οι δραστηριότητες και τα θραύσματα είναι οι προβολές, τα μοντέλα είναι το στρώμα αποθετηρίου για κλήσεις προς τη βάση δεδομένων ή απομακρυσμένες υπηρεσίες, και ο παρουσιαστής είναι ο «εγκέφαλος» που συνδέει όλα αυτά μαζί εφαρμόζοντας συγκεκριμένη λογική για τον έλεγχο προβολών, μοντέλων και τη ροή δεδομένων μέσω του εφαρμογή.



Περίληψη συστατικών

Χλευαστικές προβολές και μοντέλα

Σε αυτό το παράδειγμα δοκιμών Android, θα κοροϊδεύουμε τις προβολές, τα μοντέλα και τα στοιχεία αποθετηρίου και θα δοκιμάσουμε μονάχα τον παρουσιαστή. Αυτό είναι ένα από τα μικρότερα τεστ, με στόχο ένα μόνο στοιχείο στην αρχιτεκτονική. Επιπλέον, θα χρησιμοποιήσουμε μέθοδο stubbing για τη δημιουργία μιας κατάλληλης, δοκιμασμένης αλυσίδας αντιδράσεων:

@RunWith(RobolectricTestRunner.class) @Config(manifest = 'app/src/main/AndroidManifest.xml', emulateSdk = 18) public class FitnessListPresenterTest { private Calendar cal = Calendar.getInstance(); @Mock private IFitnessListModel model; @Mock private IFitnessListView view; private IFitnessListPresenter presenter; @Before public void setup() { MockitoAnnotations.initMocks(this); final FitnessEntry entryMock = mock(FitnessEntry.class); presenter = new FitnessListPresenter(view, model); /* Define the desired behaviour. Queuing the action in 'doAnswer' for 'when' is executed. Clear and synchronous way of setting reactions for actions (stubbing). */ doAnswer((new Answer() { @Override public Object answer(InvocationOnMock invocation) throws Throwable { ArrayList items = new ArrayList(); items.add(entryMock); ((IFitnessListPresenterCallback) presenter).onFetchAllSuccess(items); return null; } })).when(model).fetchAllItems((IFitnessListPresenterCallback) presenter); } /** Verify if model.fetchItems was called once. Verify if view.onFetchSuccess is called once with the specified list of type FitnessEntry The concrete implementation of ((IFitnessListPresenterCallback) presenter).onFetchAllSuccess(items); calls the view.onFetchSuccess(...) method. This is why we verify that view.onFetchSuccess is called once. */ @Test public void testFetchAll() { presenter.fetchAllItems(false); // verify can be called only on mock objects verify(model, times(1)).fetchAllItems((IFitnessListPresenterCallback) presenter); verify(view, times(1)).onFetchSuccess(new ArrayList(anyListOf(FitnessEntry.class))); } }

Χλευάσουμε το Global Networking Layer με το MockWebServer

Συχνά είναι βολικό να μπορούμε να χλευάσουμε το παγκόσμιο επίπεδο δικτύωσης. Το MockWebServer μας επιτρέπει να περιμένουμε ουρές για συγκεκριμένα αιτήματα που εκτελούμε στις δοκιμές μας. Αυτό μας δίνει την ευκαιρία να προσομοιώσουμε σκοτεινές απαντήσεις που περιμένουμε από τον διακομιστή, αλλά δεν είναι εύκολο να αναπαραχθούν. Μας επιτρέπει να διασφαλίσουμε πλήρη κάλυψη ενώ γράφουμε λίγο επιπλέον κώδικα.

Αποθήκη κώδικα MockWebServer παρέχει ένα καλό παράδειγμα στο οποίο μπορείτε να ανατρέξετε για καλύτερη κατανόηση αυτής της βιβλιοθήκης.

λήψη τρέχουσας ημερομηνίας ώρας javascript

Διπλά δοκιμαστικά προσαρμοσμένα

Μπορείτε να γράψετε το δικό σας μοντέλο ή ένα στοιχείο απόκρισης και να το εγχύσετε στη δοκιμή παρέχοντας μια διαφορετική ενότητα στο γράφημα αντικειμένων χρησιμοποιώντας το Dagger (http://square.github.io/dagger/). Έχουμε την επιλογή να ελέγξουμε εάν η κατάσταση προβολής ενημερώθηκε σωστά βάσει των δεδομένων που παρέχονται από το πλαστό στοιχείο του μοντέλου:

/** Custom mock model class */ public class FitnessListErrorTestModel extends FitnessListModel { // ... @Override public void fetchAllItems(IFitnessListPresenterCallback callback) { callback.onError(); } @Override public void fetchItemsInRange(final IFitnessListPresenterCallback callback, DateFilter filter) { callback.onError(); } } @RunWith(RobolectricTestRunner.class) @Config(manifest = 'app/src/main/AndroidManifest.xml', emulateSdk = 18) public class FitnessListPresenterDaggerTest { private FitnessActivity activity; private FitnessListFragment fitnessListFragment; @Before public void setup() { /* setupActivity runs the Activity lifecycle methods on the specified class */ activity = Robolectric.setupActivity(FitnessActivity.class); fitnessListFragment = activity.getFitnessListFragment(); /* Create the objectGraph with the TestModule */ ObjectGraph localGraph = ObjectGraph.create(TestModule.newInstance(fitnessListFragment)); /* Injection */ localGraph.inject(fitnessListFragment); localGraph.inject(fitnessListFragment.getPresenter()); } @Test public void testInteractorError() { fitnessListFragment.getPresenter().fetchAllItems(false); /* suppose that our view shows a Toast message with the specified text below when an error is reported, so we check for it. */ assertEquals(ShadowToast.getTextOfLatestToast(), 'Something went wrong!'); } @Module( injects = { FitnessListFragment.class, FitnessListPresenter.class }, overrides = true, library = true ) static class TestModule { private IFitnessListView view; private TestModule(IFitnessListView view){ this.view = view; } public static TestModule newInstance(IFitnessListView view){ return new TestModule(view); } @Provides public IFitnessListInteractor provideFitnessListInteractor(){ return new FitnessListErrorTestModel(); } @Provides public IFitnessListPresenter provideFitnessPresenter(){ return new FitnessListPresenter(view); } } }

Τρέχουσες δοκιμές

Android Studio

Μπορείτε εύκολα να κάνετε δεξί κλικ σε μια δοκιμαστική τάξη, μέθοδο ή ολόκληρο πακέτο δοκιμών και να εκτελέσετε τις δοκιμές από το παράθυρο διαλόγου επιλογών στο IDE.

Τερματικό

Η εκτέλεση δοκιμών εφαρμογών Android από το τερματικό δημιουργεί αναφορές για τις δοκιμασμένες τάξεις στο φάκελο 'build' της ενότητας προορισμού. Ακόμα περισσότερο, εάν σκοπεύετε να ρυθμίσετε μια αυτοματοποιημένη διαδικασία κατασκευής, θα χρησιμοποιήσετε την προσέγγιση τερματικού. Με το Gradle, μπορείτε να εκτελέσετε όλες τις δοκιμαστικές δοκιμές με εντοπισμό σφαλμάτων εκτελώντας τα εξής:

gradle testDebug

Πρόσβαση στο σετ πηγών 'δοκιμή' από την έκδοση Android Studio

Η έκδοση 1.1 του Android Studio και η προσθήκη Android Gradle παρέχει υποστήριξη για τη δοκιμή μονάδας του κωδικού σας. Μπορείτε να μάθετε περισσότερα διαβάζοντας τους εξαιρετική τεκμηρίωση σε αυτό . Η δυνατότητα είναι πειραματική, αλλά και μια εξαιρετική συμπερίληψη, καθώς μπορείτε πλέον εύκολα να κάνετε εναλλαγή μεταξύ των δοκιμών μονάδας και των συνόλων πηγών δοκιμών οργάνων από το IDE. Συμπεριφέρεται με τον ίδιο τρόπο σαν να αλλάζετε γεύσεις στο IDE.

Δοκιμή μονάδας Android

Διευκόλυνση της διαδικασίας

Η σύνταξη δοκιμών εφαρμογών Android μπορεί να μην είναι τόσο διασκεδαστική όσο η ανάπτυξη της αρχικής εφαρμογής. Ως εκ τούτου, ορισμένες συμβουλές για το πώς να διευκολύνετε τη διαδικασία γραφής δοκιμών και την αποφυγή κοινών προβλημάτων κατά τη δημιουργία του έργου θα βοηθήσουν πολύ.

AssertJ Android

AssertJ Android , όπως ίσως μαντέψατε από το όνομα, είναι ένα σύνολο λειτουργιών βοηθού που έχει δημιουργηθεί με γνώμονα το Android. Είναι μια επέκταση στη δημοφιλή βιβλιοθήκη AssertJ . Η λειτουργικότητα που παρέχεται από το AssertJ Android κυμαίνεται από απλούς ισχυρισμούς, όπως 'assertThat (view) .isGone ()', έως πράγματα τόσο περίπλοκα όπως:

ποια είναι τα καθήκοντα ενός cfo
assertThat(layout).isVisible() .isVertical() .hasChildCount(4) .hasShowDividers(SHOW_DIVIDERS_MIDDLE)

Με το AssertJ Android και την επεκτασιμότητα του, σας εγγυάται ένα απλό, καλό σημείο εκκίνησης για τη σύνταξη δοκιμών για εφαρμογές Android.

Robolectric και Manifest Path

Κατά τη χρήση του Robolectric, ενδέχεται να παρατηρήσετε ότι πρέπει να καθορίσετε τη θέση της δήλωσης και ότι η έκδοση SDK έχει οριστεί σε 18. Μπορείτε να το κάνετε αυτό συμπεριλαμβάνοντας έναν σχολιασμό 'Config'.

@Config(manifest = 'app/src/main/AndroidManifest.xml', emulateSdk = 18)

Οι δοκιμές που απαιτούν Robolectric από το τερματικό μπορούν να παρουσιάσουν νέες προκλήσεις. Για παράδειγμα, ενδέχεται να δείτε εξαιρέσεις όπως 'Το θέμα δεν έχει οριστεί'. Εάν οι δοκιμές εκτελούνται σωστά από το IDE, αλλά όχι από το τερματικό, ενδέχεται να προσπαθείτε να το εκτελέσετε από μια διαδρομή στο τερματικό όπου η καθορισμένη διαδρομή δήλωσης δεν μπορεί να επιλυθεί. Η τιμή του κωδικοποιημένου κωδικού για τη διαδρομή δήλωσης ενδέχεται να μην δείχνει στη σωστή θέση από το σημείο εκτέλεσης της εντολής. Αυτό μπορεί να επιλυθεί με τη χρήση προσαρμοσμένων δρομέων:

public class RobolectricGradleTestRunner extends RobolectricTestRunner { public RobolectricGradleTestRunner(Class testClass) throws InitializationError { super(testClass); } @Override protected AndroidManifest getAppManifest(Config config) { String appRoot = '../app/src/main/'; String manifestPath = appRoot + 'AndroidManifest.xml'; String resDir = appRoot + 'res'; String assetsDir = appRoot + 'assets'; AndroidManifest manifest = createAppManifest(Fs.fileFromPath(manifestPath), Fs.fileFromPath(resDir), Fs.fileFromPath(assetsDir)); return manifest; } }

Διαμόρφωση Gradle

Μπορείτε να χρησιμοποιήσετε τα παρακάτω για να διαμορφώσετε το Gradle για έλεγχο μονάδας. Ίσως χρειαστεί να τροποποιήσετε τα ονόματα και τις εκδόσεις εξάρτησης που απαιτούνται βάσει των αναγκών του έργου σας.

// Robolectric testCompile 'junit:junit:4.12' testCompile 'org.mockito:mockito-core:1.9.5' testCompile 'com.squareup.dagger:dagger:1.2.2' testProvided 'com.squareup.dagger:dagger-compiler:1.2.2' testCompile 'com.android.support:support-v4:21.0.+' testCompile 'com.android.support:appcompat-v7:21.0.3' testCompile('org.robolectric:robolectric:2.4') { exclude module: 'classworlds' exclude module: 'commons-logging' exclude module: 'httpclient' exclude module: 'maven-artifact' exclude module: 'maven-artifact-manager' exclude module: 'maven-error-diagnostics' exclude module: 'maven-model' exclude module: 'maven-project' exclude module: 'maven-settings' exclude module: 'plexus-container-default' exclude module: 'plexus-interpolation' exclude module: 'plexus-utils' exclude module: 'wagon-file' exclude module: 'wagon-http-lightweight' exclude module: 'wagon-provider-api' }

Υπηρεσίες Robolectric και Play

Εάν χρησιμοποιείτε τις Υπηρεσίες Google Play, θα πρέπει να δημιουργήσετε τη δική σας ακέραια σταθερά για την έκδοση Υπηρεσιών Play, προκειμένου το Robolectric να λειτουργεί σωστά σε αυτήν τη διαμόρφωση εφαρμογής.

android.library.reference.1=../../build/intermediates/exploded-aar/com.android.support/support-v4/21.0.3 android.library.reference.2=../../build/intermediates/exploded-aar/com.android.support/appcompat-v7/21.0.3

Ρομπολικές Εξαρτήσεις για Υποστήριξη Βιβλιοθηκών

Αλλο ενδιαφέρων Το πρόβλημα δοκιμής είναι ότι το Robolectric δεν μπορεί να αναφέρει σωστά τις βιβλιοθήκες υποστήριξης. Η λύση είναι να προσθέσετε ένα αρχείο 'project.properties' στη λειτουργική μονάδα όπου βρίσκονται οι δοκιμές. Για παράδειγμα, για τις βιβλιοθήκες Support-v4 και AppCompat το αρχείο πρέπει να περιέχει:

public class LoginTest extends ActivityInstrumentationTestCase2 { private static final String LAUNCHER_ACTIVITY_CLASSNAME = 'com.toptal.fitnesstracker.view.activity.SplashActivity'; private static Class launchActivityClass; static { try { launchActivityClass = Class.forName(LAUNCHER_ACTIVITY_CLASSNAME); } catch (ClassNotFoundException e) { throw new RuntimeException(e); } } private ExtSolo solo; @SuppressWarnings('unchecked') public LoginTest() { super((Class) launchActivityClass); } // executed before every test method @Override public void setUp() throws Exception { super.setUp(); solo = new ExtSolo(getInstrumentation(), getActivity(), this.getClass() .getCanonicalName(), getName()); } // executed after every test method @Override public void tearDown() throws Exception { solo.finishOpenedActivities(); solo.tearDown(); super.tearDown(); } public void testRecorded() throws Exception { try { assertTrue( 'Wait for edit text (id: com.toptal.fitnesstracker.R.id.login_username_input) failed.', solo.waitForEditTextById( 'com.toptal.fitnesstracker.R.id.login_username_input', 20000)); solo.enterText( (EditText) solo .findViewById('com.toptal.fitnesstracker.R.id.login_username_input'), ' [email protected] '); solo.sendKey(ExtSolo.ENTER); solo.sleep(500); assertTrue( 'Wait for edit text (id: com.toptal.fitnesstracker.R.id.login_password_input) failed.', solo.waitForEditTextById( 'com.toptal.fitnesstracker.R.id.login_password_input', 20000)); solo.enterText( (EditText) solo .findViewById('com.toptal.fitnesstracker.R.id.login_password_input'), '123456'); solo.sendKey(ExtSolo.ENTER); solo.sleep(500); assertTrue( 'Wait for button (id: com.toptal.fitnesstracker.R.id.parse_login_button) failed.', solo.waitForButtonById( 'com.toptal.fitnesstracker.R.id.parse_login_button', 20000)); solo.clickOnButton((Button) solo .findViewById('com.toptal.fitnesstracker.R.id.parse_login_button')); assertTrue('Wait for text fitness list activity.', solo.waitForActivity(FitnessActivity.class)); assertTrue('Wait for text KM.', solo.waitForText('KM', 20000)); /* Custom class that enables proper clicking of ActionBar action items */ TestUtils.customClickOnView(solo, R.id.action_logout); solo.waitForDialogToOpen(); solo.waitForText('OK'); solo.clickOnText('OK'); assertTrue('waiting for ParseLoginActivity after logout', solo.waitForActivity(ParseLoginActivity.class)); assertTrue( 'Wait for button (id: com.toptal.fitnesstracker.R.id.parse_login_button) failed.', solo.waitForButtonById( 'com.toptal.fitnesstracker.R.id.parse_login_button', 20000)); } catch (AssertionFailedError e) { solo.fail( 'com.example.android.apis.test.Test.testRecorded_scr_fail', e); throw e; } catch (Exception e) { solo.fail( 'com.example.android.apis.test.Test.testRecorded_scr_fail', e); throw e; } } }

Δοκιμή αποδοχής / παλινδρόμησης

Η δοκιμή αποδοχής / παλινδρόμησης αυτοματοποιεί μέρος του τελικού βήματος των δοκιμών σε ένα πραγματικό περιβάλλον 100% Android. Δεν χρησιμοποιούμε πλαστές τάξεις λειτουργικού συστήματος Android σε αυτό το επίπεδο - οι δοκιμές εκτελούνται σε πραγματικές συσκευές και εξομοιωτές.

ποια είναι τα οφέλη της τεχνητής νοημοσύνης

δοκιμή αποδοχής και παλινδρόμησης Android

Αυτές οι συνθήκες καθιστούν τη διαδικασία πολύ πιο ασταθή λόγω της ποικιλίας των φυσικών συσκευών, των διαμορφώσεων του εξομοιωτή, των καταστάσεων συσκευών και των συνόλων χαρακτηριστικών κάθε συσκευής. Επιπλέον, εξαρτάται σε μεγάλο βαθμό από την έκδοση του λειτουργικού συστήματος και το μέγεθος της οθόνης του τηλεφώνου για να αποφασίσει πώς θα εμφανίζεται το περιεχόμενο.

Είναι λίγο περίπλοκο να δημιουργήσετε τη σωστή δοκιμή που περνά σε ένα ευρύ φάσμα συσκευών, αλλά όπως πάντα θα πρέπει να ονειρευτείτε μεγάλα αλλά να ξεκινήσετε μικρά. Η δημιουργία δοκιμών με το Robotium είναι μια επαναληπτική διαδικασία. Με μερικά κόλπα, μπορεί να απλοποιηθεί πολύ.

ρομπότ

ρομπότ είναι ένα πλαίσιο αυτοματοποίησης δοκιμών Android ανοιχτού κώδικα που υπάρχει από τον Ιανουάριο του 2010. Αξίζει να σημειωθεί ότι το Robotium είναι μια πληρωμένη λύση, αλλά συνοδεύεται από μια δίκαιη δωρεάν δοκιμή.

Για να επιταχύνουμε τη διαδικασία σύνταξης δοκιμών Robotium, θα απομακρυνθούμε από τη χειροκίνητη δοκιμή γραφής στη δοκιμή εγγραφής. Η αντιστάθμιση είναι μεταξύ της ποιότητας του κώδικα και της ταχύτητας. Εάν κάνετε βαριές αλλαγές στη διεπαφή χρήστη, θα επωφεληθείτε πολύ από τη δοκιμαστική προσέγγιση εγγραφής και τη δυνατότητα γρήγορης εγγραφής νέων δοκιμών.

Καταγραφέας Testdroid είναι μια δωρεάν συσκευή εγγραφής δοκιμών που δημιουργεί δοκιμές Robotium καθώς καταγράφει τα κλικ που εκτελείτε στη διεπαφή χρήστη. Η εγκατάσταση του εργαλείου είναι εξαιρετικά εύκολη, όπως περιγράφεται στις τεκμηρίωσές τους συνοδεύεται από ένα βήμα προς βήμα βίντεο.

Δεδομένου ότι το Testdroid Recorder είναι ένα πρόσθετο Eclipse και αναφερόμαστε στο Android Studio σε όλο αυτό το άρθρο, θα ήταν ιδανικά ένας λόγος ανησυχίας. Ωστόσο, σε αυτήν την περίπτωση δεν είναι πρόβλημα, καθώς μπορείτε να χρησιμοποιήσετε την προσθήκη απευθείας με ένα APK και να καταγράψετε τις δοκιμές εναντίον του.

Μόλις δημιουργήσετε τις δοκιμές, μπορείτε να τις αντιγράψετε και να τις επικολλήσετε στο Android Studio, μαζί με οποιαδήποτε εξάρτηση που απαιτεί η συσκευή εγγραφής Testdroid και είστε έτοιμοι να ξεκινήσετε. Το καταγεγραμμένο τεστ θα μοιάζει με την παρακάτω τάξη:

gradle connectedAndroidTest

Αν κοιτάξετε προσεκτικά, θα παρατηρήσετε πόσο μεγάλο μέρος του κώδικα είναι μάλλον απλό.

Κατά την εγγραφή δοκιμών, μην σπάνια στις δηλώσεις «αναμονή». Περιμένετε να εμφανιστούν οι διάλογοι, να εμφανίζονται οι δραστηριότητες, να εμφανίζονται κείμενα. Αυτό θα εγγυηθεί ότι η δραστηριότητα και η ιεραρχία προβολής είναι έτοιμα για αλληλεπίδραση όταν εκτελείτε την ενέργεια στην τρέχουσα οθόνη. Ταυτόχρονα, τραβήξτε στιγμιότυπα οθόνης. Οι αυτοματοποιημένες δοκιμές είναι συνήθως χωρίς επίβλεψη και τα στιγμιότυπα οθόνης είναι ένας από τους τρόπους που μπορείτε να δείτε τι πραγματικά συνέβη κατά τη διάρκεια αυτών των δοκιμών.

Είτε οι δοκιμές περνούν ή αποτυγχάνουν, οι αναφορές είναι ο καλύτερος φίλος σας. Μπορείτε να τα βρείτε στον κατάλογο build «module / build / outputs / reports»:

ποια είναι η χρήση της γλώσσας γ

αναφορά δοκιμών

Θεωρητικά, η ομάδα QA θα μπορούσε να καταγράψει δοκιμές και να τις βελτιστοποιήσει. Με την προσπάθεια σε ένα τυποποιημένο μοντέλο για τη βελτιστοποίηση των δοκιμαστικών περιπτώσεων, θα μπορούσε να γίνει. Όταν καταγράφετε συνήθως δοκιμές, πρέπει πάντα να τροποποιείτε μερικά πράγματα για να το κάνετε άψογο.

Τέλος, για να εκτελέσετε αυτές τις δοκιμές από το Android Studio, μπορείτε να τις επιλέξετε και να εκτελέσετε όπως θα κάνατε δοκιμές μονάδας. Από το τερματικό, είναι ένα μεμονωμένο σκάφος:

|_+_|

Απόδοση δοκιμών

Ο έλεγχος μονάδας Android με Robolectric είναι εξαιρετικά γρήγορος, επειδή εκτελείται απευθείας μέσα στο JVM του υπολογιστή σας. Σε σύγκριση με αυτό, ο έλεγχος αποδοχής σε εξομοιωτές και φυσικές συσκευές είναι πολύ πιο αργός. Ανάλογα με το μέγεθος των ροών που δοκιμάζετε, μπορεί να διαρκέσει οπουδήποτε από λίγα δευτερόλεπτα έως λίγα λεπτά ανά δοκιμαστική περίπτωση. Η φάση δοκιμής αποδοχής θα πρέπει να χρησιμοποιείται ως μέρος μιας αυτοματοποιημένης διαδικασίας κατασκευής σε διακομιστή συνεχούς ενοποίησης.

Η ταχύτητα μπορεί να βελτιωθεί με παραλληλισμό σε πολλές συσκευές. Δείτε αυτό το εξαιρετικό εργαλείο από Τζέικ Γουάρτον και τα παιδιά στην πλατεία http://square.github.io/spoon/ . Έχει επίσης ωραία αναφορά.

Το Takeaway

Υπάρχει μια ποικιλία εργαλείων δοκιμών Android, και καθώς το οικοσύστημα ωριμάζει, η διαδικασία δημιουργίας ενός δοκιμασμένου περιβάλλοντος και γραφής δοκιμών θα γίνει ευκολότερη. Υπάρχουν ακόμη περισσότερες προκλήσεις που πρέπει να αντιμετωπιστούν και με μια ευρεία κοινότητα προγραμματιστών που εργάζονται σε καθημερινά προβλήματα, υπάρχει πολύς χώρος για εποικοδομητικές συζητήσεις και γρήγορη ανατροφοδότηση.

Χρησιμοποιήστε τις προσεγγίσεις που περιγράφονται σε αυτό το σεμινάριο δοκιμών Android για να σας καθοδηγήσει στην αντιμετώπιση των προκλήσεων που βρίσκονται μπροστά σας. Εάν και όταν αντιμετωπίζετε προβλήματα, ελέγξτε ξανά αυτό το άρθρο ή τις αναφορές που συνδέονται μέσα για λύσεις σε γνωστά προβλήματα.

Σε μια μελλοντική ανάρτηση, θα συζητήσουμε τον παραλληλισμό, τον αυτοματισμό δημιουργίας, τη συνεχή ενσωμάτωση, τα άγκιστρα Github / BitBucket, την έκδοση χειροποίητων αντικειμένων και τις βέλτιστες πρακτικές για τη διαχείριση μεγάλων έργων εφαρμογών για κινητά σε μεγαλύτερο βάθος.

Ένας οδηγός για την οικοδόμηση της πρώτης σας εφαρμογής Ember.js

Διεπαφή Ιστού

Το πρώτο σας εκπαιδευτικό πρόγραμμα AngularJS Μέρος 2: Εργαλεία για ικριώματα, κατασκευές και δοκιμές

Το πρώτο σας εκπαιδευτικό πρόγραμμα AngularJS Μέρος 2: Εργαλεία για ικριώματα, κατασκευές και δοκιμές

Διεπαφή Ιστού

Δημοφιλείς Αναρτήσεις
Πώς να επιλέξετε το καλύτερο πλαίσιο Front-End
Πώς να επιλέξετε το καλύτερο πλαίσιο Front-End
Χρειάζεστε έναν ήρωα: Ο υπεύθυνος έργου
Χρειάζεστε έναν ήρωα: Ο υπεύθυνος έργου
Πώς να βελτιώσετε την απόδοση της εφαρμογής ASP.NET στο Web Farm με προσωρινή αποθήκευση
Πώς να βελτιώσετε την απόδοση της εφαρμογής ASP.NET στο Web Farm με προσωρινή αποθήκευση
Οι δοκιμασμένοι και αληθινοί νόμοι του UX (με Infographic)
Οι δοκιμασμένοι και αληθινοί νόμοι του UX (με Infographic)
Ανώτερος συνεργάτης πελάτη, υγειονομική περίθαλψη και βιοεπιστήμες
Ανώτερος συνεργάτης πελάτη, υγειονομική περίθαλψη και βιοεπιστήμες
 
Η άνοδος των αυτοματοποιημένων συναλλαγών: Μηχανές που εμπορεύονται το S&P 500
Η άνοδος των αυτοματοποιημένων συναλλαγών: Μηχανές που εμπορεύονται το S&P 500
10 πιο κοινές ευπάθειες ασφαλείας στον Ιστό
10 πιο κοινές ευπάθειες ασφαλείας στον Ιστό
Σκέψεις για τη συγκέντρωση του ιδιωτικού σας αμοιβαίου κεφαλαίου
Σκέψεις για τη συγκέντρωση του ιδιωτικού σας αμοιβαίου κεφαλαίου
Διευθυντής έργου και διαχείρισης προϊόντων
Διευθυντής έργου και διαχείρισης προϊόντων
Η σημασία της διατήρησης πελατών - μια εμπειρική μελέτη
Η σημασία της διατήρησης πελατών - μια εμπειρική μελέτη
Δημοφιλείς Αναρτήσεις
  • έννοια της ελαστικότητας της ζήτησης ως προς την τιμή
  • Τα πρωτότυπα και τα μακέτα είναι πιο χρήσιμα για τη σχεδίαση των τάξεων λογισμικού.
  • τι είναι τα δεδομένα xml στο word
  • γιατί η Ελλάδα χρωστάει
  • ο προϋπολογισμός κεφαλαίου έχει σχεδιαστεί για να δείξει
Κατηγορίες
  • Επιστήμη Δεδομένων Και Βάσεις Δεδομένων
  • Κατανεμημένες Ομάδες
  • Ευκίνητο Ταλέντο
  • Κερδοφορία & Αποδοτικότητα
  • © 2022 | Ολα Τα Δικαιώματα Διατηρούνται

    portaldacalheta.pt