La campana.

Ci sono quelli che hanno letto questa notizia prima di te.
Iscriviti per ricevere articoli freschi.
E-mail
Nome
Cognome
Come vuoi leggere la campana
Senza spam.

Alla ricerca delle attività di test per i programmatori Java è inciampato su un sito curioso (gli utenti Avast non camminano, lo script Troyan è determinato, il resto apparentemente può essere) - http://www.betterprogrammer.com. Controlla le qualifiche dei programmatori Java il modo più semplice, ma automatico: offrendo di scrivere diverse funzioni (metodi) di crescente complessità e copiare il codice in Textarea. Successivamente, il sito del sito fa qualcosa con i compiti (non altrimenti come un test unit), calcola i criteri "di qualità della velocità", un determinato indice di qualifica e emette la stima finale in questo modulo:

Ulteriori domande iniziano. Io stesso programma su Java per la seconda volta nella mia vita (e quindi compiti difficili solo PRI), quindi l'82% di questo test corrisponde al livello programmatore non-java. Quanto dovrebbe poi Java Junior, Java Programmer e in particolare Java Senior?! Qual è il risultato da aspettarsi da presente Giava programmatore - 90, 95, 99? E infine, come essere se il "programmatore" sta guadagnando meno di 82, ma tuttavia afferma di lavorare?!

Java è un linguaggio di programmazione a striting orientato agli oggetti, sviluppato da Sun Microsystems nel 1991. Inizialmente, la lingua è stata chiamata Rovere ed è stata destinata alla programmazione dell'elettronica di consumo, ma in seguito è stata ribattezzata Java. La versione ufficiale di Java nel 1995 ha avuto molto successo e poco dopo che il linguaggio Java ha classificato forti posizioni come strumento per lo sviluppo di applicazioni server.

Al giorno d'oggi, Java utilizza in tutte le aree dello sviluppo del software - applicazioni del server, Applicazioni desktop, strumenti, applicazioni web - Tutto ciò è sviluppato utilizzando Java e tecnologie correlate.

Target Audience del test Java

Il test Java contiene domande, le risposte a cui la maggior parte degli sviluppatori conosce con esperienza di programmazione minimale su Java. Il test sarà utile a molti, comprese le persone che non hanno una maggiore esperienza con Java e vogliono ottenere un'idea minima dei concetti di base di questo popolare linguaggio di programmazione. Inoltre, questo test può essere utile per gli studenti che imparano Java a consolidare le conoscenze ottenute nell'università-Ah o come risultato del lavoro indipendente.

Prerequisiti per il test Java

Resta inteso che prima di superare il test sulle basi di Java, conosci già il concetto di base, come la "variabile", "ciclo", "metodo" e conosce la sintassi delle strutture linguistiche principali. Se questo non è così, ti consigliamo di conoscere per la prima volta le basi di Java, leggendo il corso introduttivo.

Struttura della pasta Java.

Test "Java - Fondamenti" illumina i seguenti argomenti:

Per saperne di più sull'oggetto delle domande del test, puoi leggere di seguito:

  • Oggetti e classi: questi argomenti coprono tali concetti come classe, un'istanza di classe (oggetto), designer, metodi e campi di classe.
  • Sintassi: questa sezione controllerà la conoscenza delle parole chiave della lingua, degli operatori, dei tipi principali (primitivi, stringa), strutture di controllo (se, altrimenti, mentre, per), nonché una comprensione del trattamento di situazioni eccezionali (eccezione) .
  • Altro: questa sezione contiene problemi relativi ai concetti di base, termini e abbreviazioni, convenzioni delle classi di denominazione, delle variabili e dei metodi. Inoltre, questa sezione discute domande sui file (.java, .class, .jar) e pacchetti, ciclo di vitalità Oggetti, collezione di rifiuti.

Il passaggio del test online Java ti aiuta a controllare e consolidare la conoscenza delle basi di Giava, e ti porta anche al passaggio di test più complessi dalla sezione Test Java.

Speriamo che questo test sarà utile per te e divertente.

Ulteriore sviluppo del test Java

Java Test è costantemente aggiornato con nuove domande.

Nei piani della squadra più vicina, quizful - la creazione di test del livello esperto su Java. Potresti ancora essere creato dal test di Java Puzzlers, ma sfortunatamente è molto lentamente pieno di domande.

Se non hai commenti sulle domande del test, assicurati di scriverci. In bocca al lupo.

I test sono lontani da sempre divertenti e interessanti. Questo processo è solitamente sufficientemente lungo e talvolta pieno di lavoro monotono. Sembra che, più recentemente, i programmatori hanno utilizzato l'output standard o un debugger per testare lezioni Java.

In questo articolo, descriverò la Biblioteca Junit 4, che in gran parte semplifica e automatizza in gran parte e automatizza il processo di scrittura dei test.

Per dimostrare le principali possibilità del framework di Junit, scrivi una classe primitiva nel linguaggio Java e lo facciamo moriremo. Questa classe avrà due metodi - trovare il fattoriale di un numero non negativo e la somma di due numeri. Inoltre, un contatore di chiamata del metodo sarà in un'istanza della classe.

Classe pubblica Mathfunc (Int chiamate; Pubblico Int GetCalls () (ritorno chiamate;) Fattoriale pubblico pubblico (numero INT) (chiamate ++; IF (numero 1) (Int I \u003d 1; I

Ora scrivi test unità. Per fare ciò, creare una classe con un certo numero di metodi di prova. Naturalmente, la classe può contenere metodi ausiliari convenzionali. In modo che i test del corridore possano determinare chi è chi, i metodi di prova devono essere contrassegnati con Anntoment @Test.

Le annotazioni possono essere influenzate da tali parametri:

  • previsto - indicare quale eccezione sarà generata dal metodo (vedi esempio seguente);
  • timeout - dopo a che ora a Miliseconds smettere di eseguire il test e contarlo senza successo.

Se si desidera specificare che un certo test è necessario saltare, quindi selezionarlo con @ignore annotazione. Anche se è possibile eliminare semplicemente l'annotazione @test.

Succede che per adempiere a ciascun scenario di test, è necessario un contesto, ad esempio, in anticipo creato istanze di classi. E dopo l'esecuzione, è necessario rilasciare risorse riservate. In questo caso, avrai bisogno di un'anticazione @ prima e @dter. Il metodo contrassegnato @Pefore verrà eseguito prima di ciascun caso di test e il metodo contrassegnato @dter - dopo ogni caso di prova.

Se l'inizializzazione e il rilascio di risorse devono essere eseguiti solo una volta - rispettivamente prima e dopo tutti i test, quindi utilizzare un paio di annotazioni @beforeclass e @abterclass.

Ed ecco la classe di test con diversi scenari di prova:

Mathfuncst (Private Mathfunc Math; @Pefore Public Void Init () (matematica \u003d new mathfunc ();) @1fter Public Void Teardown () (Math \u003d Null;) @Test Chiamate Voli pubbliche () (assertequals (0, matematica .getcalls ()); matematica. (Asserttrue (matematica.factorial (0) \u003d\u003d 1); asserttrue (matematica.factorial (1) \u003d\u003d 1); asserttrue (matematica.factorial (5) \u003d\u003d 120);) @test (mandato \u003d IllegalArGuMexception.Class) Pubblico Void Factialnegative () (Math.Factorial (-1);) @ignore @Test Public Void todo () (AssertTrue (Math.Plus (1, 1) \u003d\u003d 3);))

Il metodo delle chiamate verifica la correttezza del contatore di chiamata. Il metodo fattoriale controlla il calcolo fattoriale corretto per alcuni valori standard. Il metodo FactorialNegative controlla che l'illegalArguMexception sarà lanciata per valori negativi della pretetica. Il metodo TODO sarà ignorato. Prova a rimuovere l'annotazione @ignore quando si sta sperimentando il codice.

Il metodo di asserttrue controlla se il risultato dell'espressione è corretto. Alcuni altri metodi che possono tornare utile:

  • assertequals - il risultato atteso e il risultato coincidono;
  • assertnull - il risultato dell'espressione è nullo;
  • assertnotnull - il risultato di un'espressione è diverso da null;
  • assertame - previsto e gli oggetti ottenuti sono lo stesso oggetto.
  • fail: il metodo genera un'esclusione di assertionError - Aggiungi dove non deve essere raggiunta l'esecuzione del programma.

Nel nostro mondo moderno, l'IDE può trovare e semplicemente eseguire test nel progetto. Ma cosa fare se vuoi eseguirli manualmente usando il codice del software. Per fare ciò, puoi usare il corridore "Ohm, ci sono testo - junit.textui.testrunner, graphic versioni - junit.swingui.testrunner, junit.awtui.testrunner.

Ma un metodo leggermente più moderno è l'uso della classe Junitcore. Aggiungi il seguente metodo principale alla classe Mathfuncind:

Public Static Void Piner (String ARGS) Throws Eccezione (JunitCore Runner \u003d New Junitcore (); Risultato risultato \u003d runner.run (mathfunctest.class); system.out.println ("Esegui test:" + Risultato.GetRuncio ()); System.out.println ("test non riusciti:" + Risultato.getfailurecount ()); system.out.println ("test ignorati:" + Risultato.getignorecount ()); system.out.println ("successo:" + risultato .ha avuto successo ());)

E risultato dell'esecuzione:

Esegui test: 3 Test non riusciti: 0 Test ignorati: 1 successo: vero

In più versioni precoci Junit per scrivere una classe di test, era necessario creare un erede a Junit.framework.testcase. Quindi è stato necessario definire il progettista accettare il parametro stringa - il nome del metodo - e trasferirlo alla classe genitore. Ogni metodo di prova è stato obbligato a iniziare con il prefisso del test. I metodi di configurazione e Tedown sono stati utilizzati per inizializzare e gratuite risorse. In breve, horror. Bene, ora tutto è semplice, sì.

Questo è tutto oggi. Sono sicuro che il framework di Junit ti aiuterà in gran parte. Commenti e domande sull'articolo sono i benvenuti.

Junit. - Libreria per test modulari programmi Java.. Creato da Kent Beck e Eric Gamma, Junit appartiene alla famiglia Xunit Framework per diversi linguaggi di programmazione, originari del tramonto Kent Beck per SmallTalk. Ecosistema di estensione generato da Junit - Jmock, Easymock, Dbunit, httpunit, ecc.

Biblioteca Junit. È stato portato ad altre lingue, incluso PHP (PhPunit), C # (Nunit), Python (Pyunit), Fortran (Funit), Delfi (DUITA), GRATUITO PASCAL (FPCUnit), Perl (Test :: Unità), C + + (CPPUnit), Flex (FlexUnit), JavaScript (JSunit).

Junit. - Questo è un framework Java per i test, cioè test delle singole sezioni del codice, ad esempio metodi o classi. L'esperienza acquisita quando si lavora con Junit è importante nello sviluppo di concetti di test del software.

Esempio di pasta Junit.

Import org.junit.test; Import junit.framework.assert; Public Class Mathtest (@Test Public Void TestEchals () (Assert.assertequals (4, 2 + 2); Assert.assertTrue (4 \u003d\u003d 2 + 2);) @Test Public Void TestNotequals () (Assert.assertFalse (5 \u003d \u003d 2 + 2);))

La necessità di usare junit

Junit ti consente di assicurarti rapidamente che il funzionamento del codice sia rapidamente. Se il programma non è molto semplice e include molte classi e metodi, potrebbe essere necessario un tempo considerevole per controllarlo. Naturalmente, questo processo è meglio automatizzare. Usando Junit. Ti consente di controllare il codice del programma senza sforzi significativi e non ci vuole molto tempo.

Test di yunit. Le classi e le funzioni sono una sorta di documentazione a quanto previsto come risultato della loro esecuzione. E non solo documentazione e documentazione che può controllare automaticamente il codice per la conformità con le funzioni. È conveniente e spesso i test sono sviluppati sia insieme che prima della vendita di classi. Lo sviluppo attraverso il test è una tecnologia estremamente popolare per la creazione di software serio.

Tipi di test e posizionamento dei test di Junit in classificazione

Test software può essere diviso in due tipi:

  • test di una scatola nera;
  • test del cassetto bianco.

Durante il test del programma come scatola nera, la struttura interna dell'applicazione non è accettata nel calcolo. Tutto ciò che conta è la funzionalità che l'applicazione deve fornire. Durante il test di un programma come scatola bianca, viene presa in considerazione una struttura interna, cioè. Classe e metodi. Inoltre, i test possono essere suddivisi in quattro livelli:

  • test dell'unità - Test di determinate sezioni del codice;
  • test di integrazione - Test di interazione e collaborazione componenti;
  • test del sistema - Test dell'intero sistema nel suo complesso;
  • ricezione dei test - Test finale del sistema finito per la conformità.

Test dell'unità per definizione è il test di una scatola bianca.

Test dell'unità usata in due opzioni - Junit 3 e Junit 4. Considerare entrambe le versioni, poiché la 3a versione è ancora utilizzata in vecchi progetti, che supporta Java 1.4.

Junit 3.

Per creare un test, la classe di test di prova dovrebbe essere ereditata, sovrascrivere i metodi di configurazione e di scarico, se necessario, bene, la cosa più importante è sviluppare metodi di prova il cui nome dovrebbe iniziare con la abera "Test". Quando il test si avvia, viene creata la classe di test prima (per ciascun test nella classe, un'istanza separata della classe), il metodo di configurazione è in esecuzione, viene avviato il test stesso e il metodo Tedown viene eseguito. Se uno qualsiasi dei metodi causa un'eccezione, il test è considerato fallito.

Nota: i metodi di prova devono essere pubblici vuoti, può essere statico.

I test consistono nell'esecuzione di alcuni codice e controlli. I controlli sono più spesso eseguiti usando la classe Asserire. Anche se a volte usa la parola chiave assert.

Ad esempio, considera l'utilità per lavorare con le righe, inclusi i metodi per controllare una stringa vuota e rappresentando la sequenza di byte come un fiume 16:

Public Class Junit3StringTilstest Estende TestCase (Private Final Map TohexStringData \u003d New HashMap (); Setup Void protetto () Getta eccezione (tohexstringdata.put (", nuovo byte); tohexstringdata.put (" 01020D112D7F ", nuovo byte (1,2, 13 , 17.45.127); tohexstringdata.put ("00FFF21180", nuovo byte (0, -1, -14,17, -128)); // ...) Protetto Void Teardown () Getta eccezione (tohexstringdata. Cancella ();) Public Void TesttoHestringString () (per (iteratore Iterator \u003d tohexstringdata.keySet (). Iteratore (); Iterator.hasnext ();) (stringa finale atteso \u003d (stringa) iterator.next (); byte finale TestData \u003d (byte) tohexstringdata.get; stringa finale attuale \u003d stringutils.toextring (TestData); Assertequals (previsto, attuale);)) // ...)

Caratteristiche aggiuntive, TestSuite

Junit 3 ha diversi caratteristiche aggiuntive. Ad esempio, puoi raggruppare i test. Per fare questo, usa la classe TestSuite.:

Classe pubblica Junit3StringUtilstestSuite Estende Testsuite (stringutilsjunit3test.class); Addtestsuite (altroTest1.class); Addtestsuite (altroTest2.Class);))

È possibile ripetere il test del test più volte. Per questo, è usato RepetedTest:

Classe pubblica Junit3StringutilsRepeteDest estende la ripetizione (Pubblica Junit3StringutilsRepeteDtest (Super (Super (Super (), 100);))

Classe di prova inavernale da eccezioneTestcase, è possibile verificare il codice per l'emissione di eccezione:

Classe pubblica Junit3StringutilsexceptionTest estende l'eccezioneTtestcase (Super (Nome della stringa finale) (Nome, NULLOOLEXException.Class);) Public Void TesttoHexString () (stringutils.toexstring (null);))

Come si può vedere dagli esempi, tutto è abbastanza semplice e niente superfluo - codice minimo per il test di Junit.

Junit 4.

In Junit 4 Supporto aggiunto per nuove funzionalità di Java 5.0; I test possono essere annunciati utilizzando annotazioni. In questo caso, c'è una compatibilità all'indietro con versione precedente Farocework. Quasi tutti gli esempi discussi sopra funzionerà a Junit 4, ad eccezione del ripetuto, che non è disponibile nella nuova versione.

Quali modifiche apportate sono apparse a Junit 4? Considerare lo stesso esempio, ma già usando nuove opportunità:

La classe pubblica Junit4Stringutilstest si estende Assert (mappa finale privata Tohexstringdata \u003d nuovo hashmap (); @Beforeptohexstringdata () (tohexstringdata.put ("", nuovo byte); tohexstringdata.put ("01020d112d7f", nuovo byte (1,2,13,17,45,127)); tohexstringdata.put ("00fff21180", nuovo byte ( 0, -1, -14,17, -128)); // ...) @dter Public Static Void TeardowsoHexStringData () (tohexstringdata.clear ();) @Test Public Void TesttoHexString () (mappa.Entry. Entrata: tohexstringdata.entryset ()) (Byte finale TestData \u003d entry.getValue (); stringa finale atteso \u003d entry.getkey (); stringa finale attuale \u003d stringutils.toexstring (TestData); Assertequals (previsto, effettivo);)))

Cosa è cambiato a Junit 4?

  • Per semplificare il lavoro, puoi ereditare dalla classe Asserire.Anche se è facoltativo.
  • annotazione @Prima. Indica i metodi che verranno causati prima dell'esecuzione dei test. I metodi devono essere. vuoto pubblico.. Qui vengono solitamente posizionati i preset per il test, nel nostro caso è la generazione di dati di test (metodo setuptohexstringdata.).
  • Puoi usare l'annotazione @Prima della lezione.Il che significa che i metodi che saranno causati prima di creare un'istanza della classe di test; I metodi devono essere. vuoto statico pubblico.. Questa annotazione (metodo) ha senso utilizzare per il test nel caso in cui la classe contiene diversi test utilizzando vari preset o quando diversi test utilizzano gli stessi dati in modo da non perdere tempo sulla loro creazione per ciascun test.
  • annotazione @Dopo. Indica i metodi che saranno causati dopo il test. I metodi devono essere. vuoto pubblico.. Qui vengono posizionate le operazioni per il rilascio delle risorse dopo il test; Nel nostro caso, la pulizia dei dati del test (metodo teardowtohexstringdata.).
  • annotazione @Dopo la lezione collegato nel significato con @Prima della lezione.Ma esegue metodi dopo la classe di test. Come nel caso di @Prima della lezione., i metodi devono essere vuoto statico pubblico..
  • annotazione @Test denota i metodi di prova. Come prima, questi metodi devono essere vuoto pubblico.. Ecco i controlli stessi. Inoltre, in questa annotazione, è possibile utilizzare due parametri, previsto: imposta l'eccezione e il timeout previsto - imposta il tempo dopo il quale il test è considerato fallito.

Esempi di utilizzo di annotazioni con parametri, Test Junit:

@Test (manopola \u003d nullpointerexception.class) Public Void TesttoHexStringwrong () (stringutils.toexString (NULL);) @Test (Timeout \u003d 1000) Public Void Infinity () (while (True);)

Ignora l'esecuzione del test, Junit Ignora

Se uno dei test per qualsiasi motivo serio deve essere disabilitato, ad esempio, un test è costantemente completato con un errore. La correzione del test può essere posticipata a un'annotazione futura luminosa @Ignorare.. Se metti questa annotazione in classe, tutte le prove in questa classe saranno disabilitate.

@Ignore @test (timeout \u003d 1000) Public Void Infinity () (while (true);)

Regole di degustazione, Regola di Junit

Junit. Consente di utilizzare le regole definite dallo sviluppatore prima e dopo aver eseguito il test, che espande la funzionalità. Ad esempio, ci sono regole integrate per l'impostazione del timeout Timeout, per impostare l'eccezione prevista (aspettativa), lavorare con una cartella temporanea e altri.

Dichiarare la regola, devi creare pubblico non statico. Metodo Type Derivati \u200b\u200bCampo e annotalo usando una parola chiave Regola.

Public Class JunitothertherTest (@rule Public Final Final TourationalFolder Folder \u003d New TemporaryFolder (); @Rule Public Final Timeout timeout \u003d NUOVO Timeout (1000); @Rule Public Final DigiteException Thrown \u003d attesexception.none (); @ @GiNore @Test Public Void Aneinfinity ( ) (While (True);) @Test Public Void TestFileWtriting () Getta IOException ("Debug.log"); FINALE FILEWRITER LOGWRITER \u003d NUOVA FILEWRITER (LOG); LOGWRITER.AppEND ("Ciao"); Logwriter.append ("Logwriter.append (" Hello ". World !!! "); Logwriter.flush (); Logwriter.Close ();) @Test Public Void TestExPectedException () Getta IOException (Thrown.Class); stringutils.toexString (NULL);))

Set di test, Junit Suite, SuiteClasses

Avvio del test può essere configurato per annotazione @Corri con. Classi di prova che contengono metodi di prova, è possibile unire in set di test (suite). Ad esempio, vengono create due classi di test dell'oggetto: TestFilter, TestConnect. Queste due classi di prova possono essere combinate in una classe di test testWidgets.java:

Confezione com.objects; Import org.junit.runner.runwith; import org.junit.runners.suite; @Runwith (suite.class) @ suite.suiteclasses ((Testfilter.class, TestConnect.class)) TestWidgets di classe pubblica ()

Per regolare i test iniziali, vengono utilizzati @SuiteClasses, che include le classi di prova.

Categorie di annotazione.

annotazione Categorie. Ti consente di combinare test nella categoria (Gruppi). Per fare ciò, il test determina la categoria @Categoria., Successivamente, le categorie di prova attivate in Suite sono configurate. Potrebbe sembrare così:

Classe pubblica JunitstringinutilStrulScategoriStest Extens Assert (// ... @Category (unità.class) @Test Public Void TestImiSempty () (// ...) // ...) @Runwith (categorie.Class) @ Categorie.includeCategory Unità .class) @ suite.suiteclasses ((junitothertest.class, junitstringutilsategories.class)) Classe pubblica Junittestsuite ()

Annotazione, Junit parametrizzato

annotazione Parametrizzato. Consente di utilizzare test parametrizzati. Per fare ciò, la classe di test è dichiarata un metodo statico che restituisce un elenco di dati che verranno utilizzati come argomenti di progettazione di classe.

@Runwith (parametrized.class) Public Class JunitstringUTILSParameterizedTest estende Assert (Private Final Assueupence TestData; BOOLEAN FINALE PRIVATO PREVISTO; Pubblico JunitstringutilSpameterizedTest (riferimento finale TestData, boolean finale) (This.Testdata \u003d TestData; questo. Pubblico Void Testisempty () (Final boolean effettivi \u003d stringutils.isppty (TestData); Assertequals (previsto, effettivo);) @ parametrizzato.Parametrers Elenco statico pubblico Ismptydata () (ritorno array.aslist (nuovo oggetto ((, true), (", vero), (" ", falso), (" qualche stringa ", falso),));))

Parametrizzazione del metodo: teorie.class, datapoint, datapoint, teoria

annotazione Teorie Parametri Il metodo di prova, non il progettista. I dati sono contrassegnati con @Datapoint. e @Datapoint., Metodo di prova - usando @Teoria.. Il test che utilizza questa funzionalità potrebbe sembrare qualcosa del genere:

@Runwith (teorie.class) Classe pubblica JunitstringinutilsTheoryTest estende Assert (@Datapoint Object Public Static Object ISemptyData \u003d Nuovo oggetto ((", TRUE), (" ", FALSO), (" STRADE ", FALSE),); @DataPoint Public Public Oggetto statico NULLDATA \u003d nuovo oggetto (NULL, TRUE); @Theory Public Void TestData (Final boolean effettiva \u003d stringutils.isppty ((a pagamento) TestData; Assertequals (TestData, effettivo);)))

La procedura per eseguire test

Se è necessario eseguire un test in un ordine specifico, è possibile utilizzare l'annotazione @fixmethodderder (metodsors.name_ascending) definito in Junit 4.11. Per esempio:

@Fixmethodorder (metodsors.name_ascending) Public Classy MyTest (@Test Public Void Test01 () (...) @Test Public Void Test02 () (...) ... @Test Public Void Test09 () (...) )

Altrimenti, è possibile utilizzare i seguenti 2 approcci.

Void test01 (); void test02 (); ... void test09 (); @Test Public Void TestOrder1 () (TEST1 (); TEST3 ();) @TEST (EXCEX EXCEX.CLASS) PUBBLICA VOV TESTERORDER2 () (TEST2 (); TEST3 (); TEST1 ();) @Test (atteso \u003d NullpointerException.Class) Public Void TestOrder3 () (Test3 (); Test1 (); Test2 ();)

@Test Public Void TastalLalleder () (per (campione oggetto: permuta (1, 2, 3)) (per (indice oggetto: campione) .intValue ()) (caso 1: Test1 (); Break; Caso 2: Test2 ( ); Pausa; caso 3: test3 (); interruzione;))))

Elenco delle annotazioni di base

annotazioneDescrizione
@Test
Public Void Testmethod ()
il metodo è il test
@Test (timeout \u003d 100)
Public Void Testmethod ()
se il tempo di esecuzione supera il parametro Timeout, il test sarà completato senza successo
@Test (atteso \u003d myeexception.class)
Public Void Testmethod ()
il metodo deve buttare fuori le eccezioni alla classe MyException, altrimenti il \u200b\u200btest sarà completato senza successo
@Ignorare.
Public Void Testmethod ()
ignora il metodo di prova
@Prima della lezione.
il metodo viene chiamato una volta per una classe prima di eseguire metodi di prova; Qui è possibile posizionare l'inizializzazione da eseguire solo una volta, ad esempio, leggi i dati da utilizzare nei metodi di prova o creare una connessione al database
@Dopo la lezione
Public Static Void Testmethod ()
il metodo viene chiamato una volta per una classe dopo aver eseguito metodi di prova; Qui è possibile posizionare la deinitilizzazione che è necessario eseguire solo una volta, ad esempio, per chiudere la connessione al database o eliminare i dati che non sono più necessari.
@Prima.
Public Static Void beforemethod ()
il metodo è causato a ciascun metodo di prova nella classe di test; Qui è possibile eseguire l'inizializzazione necessaria, ad esempio, per impostare i parametri iniziali.
@Dopo.
Public Static Void After Methothod ()
il metodo causato dopo ogni metodo di prova nella classe di test; Qui è possibile eseguire la deinitilizzazione necessaria, ad esempio, eliminare i dati che non sono più necessari.

Asserze Checks List.

Tipo di controlloDescrizione
fallire ()
Fail (Messaggio String)
l'impasto si interrompe con un errore, I.e. Il test non sarà riuscito
assertTrue (condizioni booleane)
AssertTrue (java.lang.String messaggio, condizione booleana)
verifica sulla condizione di condizioni di uguaglianza Vero valore reale
assertFalse (condizioni booleane)
AssertFalse (Messaggio stringa, condizione booleana)
verifica sulla condizione della condizione di uguaglianza Valore falso
assertequals (<тип> Previsto,<тип> EFFETTIVO)
Assertequals (Messaggio String,<тип> Previsto,<тип> EFFETTIVO)
controlla l'uguaglianza;<тип> - Questo è oggetto, int, doppio, ecc.
assertartarrayequals (pretendenti pregiudizi, byte effettivi)
Assertartarrayequals (Messaggio stringa,<тип> Attese,<тип> Attuali)
controllo degli array per uguaglianza; Simile a Assertequals;<тип> - Questo è oggetto, int, doppio, ecc.
assertnotnull ( Oggetto Oggetto.)
Assertnotnull (Messaggio stringa, oggetto oggetto)
controlla che l'oggetto non sia nullo
assertnull (oggetto oggetto)
Assertnull (Messaggio stringa, oggetto oggetto)
controlla quell'oggetto null
assertame (oggetto previsto, oggetto effettivo)
Assertame (Messaggio stringa, oggetto previsto, oggetto oggetto)
controllo dell'uguaglianza di due oggetti previsti ed effettivi, cioè uno e lo stesso oggetto

Esempio di test junit.

Per dimostrare le principali possibilità di Junit, usiamo una primitiva Funcmath di classe Java, che ha due metodi - trovare il fattoriale di un numero non negativo e la somma di due numeri. Inoltre, un contatore di chiamata del metodo sarà in un'istanza della classe.

Public Class Funcmath (Int chiama; Pubblico int Gettcalls () (chiamate di ritorno;) Fattoriale pubblico pubblico (se numero) (chiamate ++; se (numero< 0) throw new IllegalArgumentException(); long result = 1; if (number > 1) (per (int I \u003d 1; io< = number; i++) result = result * i; } return result; } public long plus(int num1, int num2) { calls++; return num1 + num2; } }

A volte c'è qualche contesto per eseguire ciascun scenario di test, ad esempio, le istanze di classi pre-create. E dopo l'esecuzione, è necessario rilasciare risorse riservate. In questo caso, le annotazioni di @prima e @dter. Il metodo contrassegnato @Pefore verrà eseguito prima di ciascun caso di test e il metodo contrassegnato @dter - dopo ogni caso di prova. Se l'inizializzazione e la liberazione delle risorse dovrebbero essere eseguite solo una volta - rispettivamente prima e dopo tutti i test, usano un paio di annotazioni @beforeclass e @abterclass.

La classe di test con diversi scenari avrà il seguente modulo:

Import org.junit.test; Import org.junit.fter; Importare org.junit.prima; Import org.junit.assert; Import org.junit.afterclass; Import org.junit.beforeclass; Classe pubblica Junit_funcmath si estende Assert (Private funcmath Math; @Before Public Void Init () (Math \u003d New Funcmath ();) @Dter Public Void Teardown () (matematica \u003d null;) @Test ("Assertequals (" Math.GetCalls ()! \u003d 0 ", 0, DAO.GetConnection ()); math.factorial (1); assertequals (1, math.getcalls ()); math.factorial (1); assertequals (2, matematica. GetCalls ());) @Test Public Void fattorial () (asserttrue (matematica.factorial (0) \u003d\u003d 1); asserttrue (matematica.factorial (1) \u003d\u003d 1); asserttrue (math.factorial (5) \u003d\u003d 120);) @test (mandato \u003d illegalArgumentException.Class) Public Void Fattialnegative () (matematica.Factorial (-1);) @ignore @Test Public Void todo () (asserttrue (math.plus (1, 1) \u003d\u003d 3);))

Il metodo delle chiamate verifica la correttezza del contatore di chiamata. Il metodo fattoriale controlla il calcolo fattoriale corretto per alcuni valori standard. Il metodo FactorialNegative controlla che l'illegalArguMexception sarà lanciata per valori negativi della pretetica. Il metodo TODO sarà ignorato.

In conclusione, va notato che l'articolo presenta non tutte le possibilità di utilizzare Junit. Ma come si può vedere dagli esempi di cui sopra, il quadro è abbastanza facile da usare, ci sono poche funzionalità aggiuntive, ma c'è la possibilità di espansione utilizzando regole e antipasti.

Credo che lo sviluppo del software sia più che lavoro. Mi vedo un'artigianato che sta cercando di migliorare ogni giorno. Il modo più "semplice" per questo è trovare alcuni buoni strumenti e rispondere alle seguenti domande:

  • Quando dovrei usare lo strumento X?
  • Come dovrei usare lo strumento X?

Il test automatico è una parte molto importante dello sviluppo del software, ma nei blog dei programmatori pochi post sugli strumenti utilizzati. Lo stesso articolo ti permetterà di guardare nella mia "scatola con gli strumenti". Parlerò di 12 librerie e framework che uso per la scrittura di test di unità e integrazione, oltre a fornire collegamenti a pagine che ti aiuteranno a capire come usarle.

Guarda nella mia scatola con gli strumenti

Prima di poter utilizzare gli strumenti descritti di seguito, è necessario configurare un assembly che avvia automaticamente l'integrazione e i test universitari. Ho 2 note su questo argomento:

  • I test di integrazione con Maven descrivono come possiamo configurare il gruppo MAVEN con Integration e Unit Test in diverse directory.
  • Guida introduttiva con Gradle: il test di integrazione con il plugin TestSet descrive lo stesso per Gradle.

Ora sei pronto a guardare i miei strumenti più vicini. Li ho suddivisi in categorie per rendere più facile per te navigare.

Quindi, ecco 12 strumenti che uso con integrazione e test unitario.

Test iniziali

AssertJ fornisce un'API flessibile per scrivere dichiarazioni con utili di errore utili, migliora la leggibilità del codice di prova, consente di trasformare i test in specifiche eseguibili che aderiscono alla lingua orientata al soggetto desiderata.

Inoltre:

  • L'utilizzo di Hamcrest nel test indica come utilizzare Hambrest per scrivere test, nonché come espandere le sue capacità utilizzando moduli personalizzati.
  • Ci rivolgiamo all'approvazione di un linguaggio orientato agli oggetti racconta come creare dichiarazioni personalizzate in Assertj.
  • Scriviamo test puliti: sostituzione delle accuse Linguaggio orientato al soggetto. Dice perché dobbiamo sostituire le dichiarazioni standard di Junit con il nostro, che usano la lingua oggettiva fedele.

Test del codice di accesso ai dati

Fast Database, utile per scrivere test di integrazione che funzionano sulla macchina per sviluppatori locali.

Estensione per Junit, che può essere utilizzata per inizializzare il database in un determinato stato prima di eseguire ciascun test di integrazione e riempire il database con i dati necessari. Dbunit ha i suoi inconvenienti, ma è molto attrezzo utileConsentire di dividere i dati del test e il codice di prova.

Inoltre:

  • Descrive i componenti chiave di Dbunit, la cui conoscenza è necessaria per scrivere test usando Dbunit.
  • Fornisce cinque regole di ortografia per i migliori test per il codice di accesso ai dati.

La campana.

Ci sono quelli che hanno letto questa notizia prima di te.
Iscriviti per ricevere articoli freschi.
E-mail
Nome
Cognome
Come vuoi leggere la campana
Senza spam.