logo

Mock, Stub ve Spy'a Karşı

Sahte

Mock'lar yöntem çağrılarını saklayan nesnelerdir. Testlerde kullanılan bağımlılıklar için dinamik sarmalayıcılar olarak anılır. Java sınıfları arasındaki etkileşimi kaydetmek ve doğrulamak için kullanılır. Mock, test çiftlerinin en güçlü ve esnek versiyonu olarak bilinir. Alay etmek için kullandığımız bir yöntem denir sahte() .

Taklit kullanmanın ana işlevi, taklit edilen nesnelerin davranışları üzerinde tam kontrol sağlamasıdır. Sahte nesneler genellikle şunlar için kullanılır: davranış doğrulama . Davranış terimi, nesnelere uygulanan doğru yöntemleri ve yolları kontrol etmek anlamına gelir.

csv dosyası java'yı oku

Mock'lar çoğunlukla bir kütüphane veya Mockito, JMock ve EasyMock gibi alaycı bir çerçeve kullanılarak oluşturulur. Taslakların yeterli olmadığı geniş bir test paketini test etmek için kullanılır. Mock'un temel işlevlerinden biri, belirli bir yöntemin kaç kez çağrıldığını doğrulayabilmemizdir.

Aşağıdaki kod parçacığı, make() işlevinin nasıl kullanılacağını gösterir.

 ToDoService doService = mock(ToDoService.class); 

Taslak

Taslaklar, önceden tanımlanmış verileri tutan ve bunları testler sırasında yanıt vermek için kullanan nesnelerdir. Başka bir deyişle saplama, bir test için gereken minimum sayıda yöntem ile gerçek bir nesneye benzeyen bir nesnedir. Taslaklar, gerçek verilerle yanıt verecek nesneleri kullanmak istemediğimizde kullanılır. Saplama, testin en hafif ve en statik versiyonu olarak adlandırılır.

Saplamaların ana işlevleri şunlardır:

gigabayt ile megabayt arasındaki fark
  • Girişten bağımsız olarak her zaman önceden tanımlanmış çıkışı döndürür.
  • Veritabanı nesnelerine benzemek için kullanılabilir.
  • Taslaklar, gerçek nesnelerin oluşturulması sırasında ortaya çıkan karmaşıklıkları azaltmak için kullanılır. Esas olarak gerçekleştirmek için kullanılırlar durum doğrulaması .

Casus

Casuslar olarak bilinir kısmen sahte nesneler . Bu, casusun gerçek nesneleri saptırarak veya gözetleyerek gerçek nesnenin kısmi bir nesnesini veya yarı kuklasını oluşturduğu anlamına gelir. Casuslukta gerçek nesne değişmeden kalır ve biz sadece onun bazı belirli yöntemlerini gözetleriz. Başka bir deyişle, mevcut (gerçek) nesneyi alıyoruz ve yer değiştirmek veya casus yöntemlerinden yalnızca birkaçı.

Yöntemlerle dolu büyük bir sınıfımız olduğunda ve belirli yöntemlerle alay etmek istediğimizde casuslar faydalıdır. Bu senaryoda sahtekarlık ve taslak yerine casus kullanmayı tercih etmeliyiz. Yöntemler saplanmamışsa gerçek yöntem davranışını çağırır.

Mockito'da casus nesneler oluşturmak için spy() yöntemi kullanılır. Gerçek nesnenin normal yöntemlerini çağırmamızı sağlar. Aşağıdaki kod parçacığı spy() yönteminin nasıl kullanılacağını gösterir.

 List spyArrayList = spy(ArrayList.class); 

Stub ve Mock arasındaki fark

Parametreler Taslak Sahte
Veri kaynağı Taslakların veri kaynağı sabit kodlanmıştır. Genellikle test takımına sıkı bir şekilde bağlanır. Modellere ilişkin veriler testler tarafından oluşturulur.
Tarafından yaratıldı Taslaklar genellikle elle yazılır ve bazıları araçlarla oluşturulur. Mock'lar genellikle Mockito, JMock ve WireMock gibi üçüncü taraf kütüphaneler kullanılarak oluşturulur.
Kullanım Taslaklar çoğunlukla basit test paketleri için kullanılır. Mock'lar çoğunlukla büyük test süitleri için kullanılır.
Grafik Kullanıcı Arayüzü (GUI) Taslakların GUI'si yoktur. Sahtelerin bir GUI'si var.

Sahte ve casus arasındaki bazı farklar aşağıdadır:

Parametreler Sahte Casus
Kullanım Mock'lar tamamen sahte veya sahte nesneler oluşturmak için kullanılır. Esas olarak büyük test süitlerinde kullanılır. Casuslar kısmi veya yarı sahte nesneler oluşturmak için kullanılır. Mock gibi casuslar da büyük test odalarında kullanılır.
Varsayılan davranış Sahte nesneler kullanıldığında, yöntemlerin varsayılan davranışı (inceltilmediği zaman) hiçbir şey yapmamadır (hiçbir şey gerçekleştirmez). Casus nesneleri kullanırken, yöntemlerin varsayılan davranışı (inceltilmediği zaman) gerçek yöntem davranışıdır.

Önceki eğitimlerimizde inatlama, alay etme ve casusluğun bazı örneklerini tartışmıştık. İnatçılık, alay etme ve casusluk arasındaki farkı daha iyi anlamak için örnekleri inceleyin.