1.1 Biblioteca Mockito
Astăzi ne vom familiariza cu testarea avansată. Mai precis, cu biblioteca Mockito . Nici să nu te gândești să ieși din afacerea asta.
În primul rând, această bibliotecă este un standard în testarea Spring . Care este de fapt standardul în industria de dezvoltare backend Java.
În al doilea rând, va trebui să scrieți teste pentru codul Spring . Singura modalitate de a înțelege că backend-ul pe care l-ați scris funcționează așa cum ar trebui este să apelați metode ale API-ului său . Și să o faci cu teste este de 10 ori mai ușor decât fără ele. Vei vedea singur.
Puteți adăuga biblioteca Mockito la a dvs. pom.xml
folosind codul:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>
Întregul cod sursă pentru proiectul Mockito poate fi găsit pe GitHub .
1.2 Obiecte simulate
Deci, ce este acest Mockito și de ce este atât de bun?
În procesul de dezvoltare și dezvoltare a testării, de foarte multe ori a fost nevoie de a introduce un fel de „ciot” în cod în loc de un obiect real.
De exemplu, codul care funcționează cu baza de date este testat și modifică ceva acolo. Este bine ca inainte de fiecare test starea acestei baze de date sa fie aceeasi (in caz contrar testele vor fi diferite). Și mi-aș dori ca baza să fie mai simplă pentru a retrage rapid aceste stări.
Sau, de exemplu, testați un cod care trimite SMS-uri utile. Și pentru corespondența directă, el folosește un fel de SMS Gateway plătit. Ar fi bine să strecurați niște Gateway virtual în el pentru a testa codul, pentru a nu trimite sute de SMS-uri unor persoane de neînțeles.
Sau codul dvs. solicită date de la alte servere web care pur și simplu nu sunt disponibile pe serverul de testare. Sau scrieți un cod pentru plăți online care trebuie testat de 50 de ori și abia apoi permis să fie folosit în canalele financiare reale.
Cred că înțelegi... Obiectele virtuale, sau cum se mai numesc și obiecte stub, sunt un lucru foarte util.
Și aici vine dificultatea - Java are tastare statică. Aceasta înseamnă că pentru a ReadDatabase
atribui o referință la un obiect unei variabile în loc de un obiect de tip VirtualDatabase
, trebuie să moșteniți clasa VirtualDatabase
de la RealDatabase
.
Apoi, se dovedește că clasa are RealDatabase
o grămadă de metode și variabile private care stochează referințe la alte obiecte reale și nu puteți scrie un stub normal în acest fel. În teorie este bine, dar în practică este o fundătură.
Și aici vine în ajutor ( puteți citiDynamicProxy
mai detaliat ), care a apărut din nou în Java 5. Vă permite să creați obiecte virtuale despre care compilatorul nu are nicio plângere.
Astfel de obiecte virtuale sunt numite mock-uri (din cuvântul mock - layout). Biblioteca Mockito a reușit să ducă lucrările cu aceste imitații la o înălțime fără precedent. De aici, apropo, numele bibliotecii.
1.3 @ExtendWith adnotare
Biblioteca Mockito funcționează excelent cu JUnit, poate fi considerată chiar o extensie a acesteia.
Există două moduri de a activa biblioteca Mockito în testele dvs. unitare. Prima modalitate este să adăugați o adnotare specială:
@ExtendWith(MockitoExtension.class)
public class MockitoAnnotationTest {
...
}
A doua modalitate este de a-i activa funcționarea apelând metoda openMocks()
:
public class MockitoAnnotationTest {
@BeforeEach
public void init() {
MockitoAnnotations.openMocks(this);
}
}
Cel mai adesea, veți vedea prima opțiune, dar uneori este util să știți că există o a doua.
GO TO FULL VERSION