1.1 Mockito kitaplığı

Bugün gelişmiş testlerle tanışacağız. Daha spesifik olarak, Mockito kitaplığı ile . Bu işten çıkmayı aklından bile geçirme.

İlk olarak, bu kitaplık Spring testinde bir standarttır . Bu aslında Java arka uç geliştirme endüstrisindeki standarttır.

İkinci olarak, Spring kodunuz için testler yazmanız gerekecek . Yazdığınız arka ucun olması gerektiği gibi çalıştığını anlamanın tek yolu, API'sinin yöntemlerini çağırmak . Ve bunu testlerle yapmak, onlarsız yapmaktan 10 kat daha kolay. Kendin göreceksin.

pom.xmlAşağıdaki kodu kullanarak Mockito kitaplığını kendinize ekleyebilirsiniz :

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-junit-jupiter</artifactId>
    <version>4.2.0</version>
    <scope>test</scope>
</dependency>

Mockito projesinin kaynak kodunun tamamı GitHub'da bulunabilir .

1.2 Sahte nesneler

Peki bu Mockito nedir ve neden bu kadar iyi?

Test geliştirme ve geliştirme sürecinde, çoğu zaman gerçek bir nesne yerine koda bir tür "saplama" koyma ihtiyacı vardı.

Örneğin, veritabanıyla çalışan kod test edilir ve orada bir şeyler değişir. Her testten önce bu veritabanının durumunun aynı olması iyidir (aksi takdirde testler farklı olacaktır). Ve bu durumları hızla geri almak için tabanın daha basit olmasını istiyorum.

Veya örneğin, yararlı SMS gönderen bir kodu test ediyorsunuz. Ve doğrudan postalar için bir tür ücretli SMS Ağ Geçidi kullanıyor. Anlaşılmaz insanlara yüzlerce SMS göndermemek için kodu test etmek için içine bir sanal Ağ Geçidi yerleştirmek güzel olurdu.

Veya kodunuz, test sunucusunda bulunmayan diğer web sunucularından veri istiyor. Veya online ödemeler için 50 kez test edilmesi gereken ve ancak o zaman gerçek finansal kanallarda kullanılmasına izin verilen bir kod yazarsınız.

Anladığınızı düşünüyorum ... Sanal nesneler veya aynı zamanda saplama nesneleri olarak da adlandırıldıkları için çok yararlı şeylerdir.

Ve işte zorluk geliyor - Java statik yazmaya sahip. ReadDatabaseBu, türdeki bir nesne yerine bir değişkene bir nesneye başvuru atamak için VirtualDatabasesınıfı VirtualDatabaseşuradan miras almanız gerektiği anlamına gelir RealDatabase.

Ardından, sınıfın diğer gerçek nesnelere referansları saklayan bir dizi özel yöntemi ve değişkeni olduğu ortaya çıktı RealDatabaseve bu şekilde normal bir saplama yazamazsınız. Teoride iyi ama pratikte çıkmaz sokak.

Ve burada , Java 5'te ortaya çıkan kurtarmaya geliyor ( DynamicProxydaha ayrıntılı olarak okuyabilirsiniz ). Derleyicinin hakkında hiçbir şikayeti olmayan sanal nesneler oluşturmanıza olanak tanır.

Bu tür sanal nesnelere alay denir (sahte - düzen kelimesinden). Mockito kütüphanesi, bu maketlerle çalışmayı eşi benzeri görülmemiş bir yüksekliğe taşıyabildi. Dolayısıyla, bu arada, kütüphanenin adı.

1.3 @ExtendWith açıklama

Mockito kütüphanesi, JUnit ile harika çalışıyor, hatta onun bir uzantısı olarak kabul edilebilir.

Birim testlerinizde Mockito kitaplığını etkinleştirmenin iki yolu vardır. İlk yol, özel bir açıklama eklemektir:

@ExtendWith(MockitoExtension.class)
public class MockitoAnnotationTest {
    ...
}

İkinci yol, yöntemi çağırarak çalışmasını etkinleştirmektir openMocks():

public class MockitoAnnotationTest {
    @BeforeEach
    public void init() {
        MockitoAnnotations.openMocks(this);
   }
}

Çoğu zaman ilk seçeneği görürsünüz, ancak bazen ikinci bir seçenek olduğunu bilmek yararlıdır.