En çok oy alan cevaptan da bahsedildiği gibi, Martin Fowler, Mocks Arıtsız Saplamalarda ve özellikle Alaylar ve Saplamalar arasındaki Fark alt başlığında bu ayrımları tartışıyor , bu yüzden bu makaleyi okuduğunuzdan emin olun.
Aksine odaklanmak yerine nasıl bu durum farklı, bunu daha odaklanmak aydınlatarak düşünüyorum neden bu farklı kavramlardır. Her biri farklı bir amaç için var.
sahte
Bir sahte olduğunu davranacağını "doğal" bir uygulama olduğunu, ancak "gerçek" değildir. Bunlar bulanık kavramlar ve bu yüzden farklı insanlar şeyleri sahte yapan şeyleri farklı anlıyorlar.
Sahte bir örnek, bir bellek içi veritabanı (örn :memory:
. Mağaza ile sqlite kullanarak ). Bunu asla üretim için kullanmazsınız (veriler kalıcı olmadığından), ancak test ortamında kullanmak için veritabanı olarak mükemmel bir şekilde yeterlidir. Ayrıca "gerçek" bir veritabanından çok daha hafiftir.
Başka bir örnek olarak, belki de üretimde bir çeşit nesne deposu (örneğin Amazon S3) kullanıyorsunuz, ancak bir testte nesneleri diskteki dosyalara kaydedebilirsiniz; "diske kaydet" uygulamanız sahte olur. (Ya da bunun yerine bellek içi bir dosya sistemi kullanarak "diske kaydet" işlemini taklit edebilirsiniz.)
Üçüncü örnek olarak, bir önbellek API'si sağlayan bir nesne düşünün; doğru arabirimi uygulayan ancak önbelleğe alma işlemi gerçekleştirmeyen, ancak her zaman önbellek kaybını döndüren bir nesne bir tür sahte olur.
Sahte amacı olmayan test edilen sistemin davranışını etkilemek için değil, karşı uygulanmasını kolaylaştırmak (gereksiz ya ağır bağımlılıkları kaldırarak) testin.
koçanları
Bir saplama "doğal olmayan" davranır bir uygulamasıdır. Belirli çıkışlara sahip belirli girişlere yanıt vermek için önceden yapılandırılmıştır (genellikle test kurulumu tarafından).
Bir saplamanın amacı, sisteminizi belirli bir duruma test etmektir. Örneğin, REST API ile etkileşimde bulunduğunda, sen ki bazı kod için bir test yazıyorsanız eğer saplama her zaman belirli bir hata ile bir API isteğine hazır yanıtını veya bu kişi yanıt döndüren bir API ile REST API. Bu şekilde sistemin bu durumlara nasıl tepki verdiğine dair iddialarda bulunan testler yazabilirsiniz; örneğin, API bir 404 hatası döndürürse kullanıcılarınızın aldıkları yanıtı test etmek.
Bir saplama genellikle yalnızca yanıt vermesini istediğiniz etkileşimlere yanıt vermek için uygulanır. Ancak bir şeyi bir saplama yapan temel özellik onun amacıdır :
Mocks
Bir sahte bir saplamaya benzer, ancak doğrulama eklenmiştir. Bir sahte alayın amacı, test altındaki sisteminizin bağımlılık ile nasıl etkileşime girdiğine dair iddialarda bulunmaktır .
Örneğin, bir web sitesine dosya yükleyen bir sistem için bir test yazıyorsanız, bir dosyayı kabul eden ve yüklenen dosyanın doğru olduğunu iddia etmek için kullanabileceğiniz bir alay oluşturabilirsiniz. Ya da, daha küçük bir ölçekte, test altındaki sistemin alay konusu nesnenin belirli yöntemlerini çağırdığını doğrulamak için bir nesne sahte kullanmak yaygındır.
Alaylar, belirli bir test metodolojisi olan etkileşim testine bağlıdır . Sistem etkileşimleri yerine sistem durumunu test etmeyi tercih edenler, alaycı bir şekilde kullanacaklardır.
Test iki katına çıkar
Sahte, taslak ve alayların tümü test çiftleri kategorisine aittir . Test çifti, testte başka bir şey yerine kullandığınız herhangi bir nesne veya sistemdir . Çoğu otomatik yazılım testi, bir tür test çiftinin kullanılmasını içerir. Diğer bazı test çiftleri arasında kukla değerler , casuslar ve G / Ç kara delikleri bulunur .