"Saplama" nedir?


116

Bu yüzden, TDD'ye daha fazla girme konusundaki yeni yıl kararlılığımı sürdürerek, şimdi Rhino Mocks ile daha fazla çalışmaya başlıyorum .

Yapmaya hevesli olduğum bir şey, neye bulaştığımdan gerçekten emin olmaktır, bu yüzden şimdiye kadar gördüklerimi anladığımı kontrol etmek istedim (ve bunu bir an önce buraya getirmenin iyi olacağını düşündüm. kaynak).

"Saplama" nedir?


6
önce bir soru sorarsınız ve sonra cevap verirsiniz?
empi

17
Soruda belirtildiği gibi - anlayışımın doğru olduğunu doğrulamak istiyorum, bu çok sorulan ama nadiren iyi cevaplanan soruya bir kaynak sağlamak için cevabın burada olmasını (benim olsun ya da olmasın) istedim: )
Rob Cooper

42
Ayrıca kendi sorularını yanıtlamak, siteyi kullanmanın geçerli bir yolu olarak SSS'de belirtilmiştir - aslında bu teşvik edilmelidir.
Erik Forbes

Sorunun kendisi biraz fazla gürültülü (otobiyografi) ve bir cevap bulmak için hiçbir çaba göstermese de, kişinin cevabı bulmaya çalışmak için ne yaptığına dair hiçbir eğilim göstermese de kendi sorularınızı cevaplamanız sorun değil.
eric

Yanıtlar:


112

Martin Fowler bu konuda mükemmel bir makale yazdı . O makaleden:

Meszaros, test amacıyla gerçek bir nesne yerine kullanılan her tür taklit nesne için genel terim olarak Test Double terimini kullanır. İsim, filmlerdeki Stunt Double fikrinden geliyor. (Amaçlarından biri, halihazırda yaygın olarak kullanılan herhangi bir ismi kullanmaktan kaçınmaktı.) Meszaros daha sonra dört belirli tür ikilemi tanımladı:

  • Kukla nesneler etrafta dolaştırılır, ancak gerçekte asla kullanılmaz. Genellikle sadece parametre listelerini doldurmak için kullanılırlar.
  • Sahte nesnelerin aslında çalışan uygulamaları vardır, ancak genellikle onları üretim için uygun olmayan bir kısayol kullanır (bellek içi veritabanı iyi bir örnektir).
  • Stub'lar, test sırasında yapılan çağrılara hazır yanıtlar sağlar, genellikle test için programlananların dışındaki hiçbir şeye yanıt vermez. Stub'lar ayrıca, 'gönderdiği' mesajları veya belki de yalnızca kaç mesaj 'gönderdiğini' hatırlayan bir e-posta ağ geçidi saplaması gibi aramalarla ilgili bilgileri kaydedebilir.
  • Burada bahsettiğimiz şey taklitler: beklentilerle önceden programlanmış nesneler, almaları beklenen çağrıların bir özelliğini oluşturur.

Kendi sözlerime göre: sahte nesneler, belirli yöntemlerin kendilerine çağrılmasını "bekler" ve beklentileri karşılanmazsa tipik olarak bir birim testinin başarısız olmasına neden olur. Saplama nesneleri yanıt konserve sağlayan (ve yardımcı kütüphaneler tarafından otomatik olabilir), ancak tipik olarak yok değil , doğrudan birim test başarısız olmasına neden olur. Genellikle test ettiğiniz nesnenin işini yapması için ihtiyaç duyduğu verileri alması için kullanılırlar.


2
Öyleyse sahte nesnelerle dikişler arasındaki fark nedir? Sizin de belirttiğiniz gibi, uygulanacak rolleri aynı değil mi?
LKM

4
@LKM sahte bir nesne, gerçek işlevselliği uygulayan ve bir şeyler yapan gerçek bir nesnedir. Taslaklar sadece "hazır cevaplardır" örn. web sunucusundan neyin döndürüleceğini taklit eden sabit kodlu JSON sonuçları.
user3344977

31

"Saplama", veri / bir tür yanıt sağlamak için var olan bir arabirimin uygulamasıdır. Örneğin:

  • bir Veri Kümesi
  • Kullanıcı listesi
  • bir Xml Dosyası

Normalde bu, başka bir hizmet (Web Hizmeti, başka bir uygulama, bir veritabanı olabilir) tarafından sağlanır, ancak kodun test edilebilirliğini artırmak için sonuçlar "sahtedir".

Bunun en büyük yararı, beklenen verilere dayalı olarak birim testlerde iddiaların yapılmasına izin vermesidir. Veri hatalarından dolayı hatalar ortaya çıkarsa, testler kolaylıkla eklenebilir, yeni bir saplama oluşturulabilir (veri hatasını çoğaltarak) ve hatayı düzeltmek için kod üretilebilir.

Sıv farklılık Mocks temsil ettikleri ve test etmek için kullanılır ki durum bir Taklit onun test ise, bir nesnenin bir etkileşim .


cevabınız için teşekkürler, ancak hala anlamıyorum: "bir arayüz uygulaması" ??
BKSpurgeon

6

"Saplama" nın STartUpBlock'tan geldiğine inanıyorum. size, yani geliştiriciye başlamanıza yardımcı olmak için otomatik olarak oluşturulan kod bölümlerine atıfta bulunmak için kullanılır.


1
Bunun doğru olduğunu sanmıyorum. Muhtemelen ev inşaatındaki bu uygulamadan geliyor: hunker.com/12000314/what-is-a-stub-out
mattdm

3

Bir "saplama" veya "saplama yöntemi", bir başlangıç ​​kodu veya henüz geliştirilecek olan kodun geçici bir ikamesi olacak şekilde tasarlanmıştır. Bir IDE tarafından oluşturulan yerleşik bir koddur. Stub yöntemleri, aslında belirli bir sınıfın yöntemlerini test etmek için kullanılan yöntemlerdir. Gerçek geliştirme yöntemlerinizde yerel değişkenler için bazı değerler girerek ve çıktının doğru olup olmadığını kontrol ederek kullanılır. Kodunuzdaki hataları bulmak önemlidir.


Bu cevap daha ayrıntılı bir şekilde açıklanırsa daha iyi olur: Bir saplama yönteminin amacı nedir? Nasıl kullanılır? neden önemlidir?
Evan Weissburg

Teşekkürler! Programlamada yeniyim ve Yazılım Geliştirme hakkında yeni şeyler öğrenmeye başladım. Şimdiye kadar saplama yöntemleri hakkında anladığım şey bu. Bu yüzden amacının, öneminin ve nasıl kullanıldığından emin değilim. Ancak, saplama yöntemlerinin aslında belirli bir sınıfın yöntemlerini test etmek için kullanılan yöntemler olduğunu düşünüyorum. Gerçek geliştirme yöntemlerinizde yerel değişkenler için bazı değerler girerek ve çıktının doğru olup olmadığını kontrol ederek kullanılır. Kodlarınızdaki hataları bulmak önemlidir. Eklemek veya düzeltmek istediğiniz başka bir şey varsa, lütfen yorum yapın. Şu anda test etmeyi öğreniyorum.
Nasserr

1
Öğreniyor olman harika! Orijinal cevabınızı, gelecekteki okuyucuların yorum yazmak yerine ondan kolayca öğrenebilmesi için düzenlemelisiniz. Ek olarak - bir şeyden emin değilseniz, neden bununla ilgili güvenilir bir cevap gönderiyorsunuz?
Evan Weissburg

1
Kendi kendine öğrenen biriyseniz bu sorun değil - StackOverflow'da, onlardan emin olmadığınız sürece yanıtlar göndermenize gerek yoktur. Bu standart bir forum değil. Bakınız: stackoverflow.com/tour
Evan Weissburg

1
Rehberler ve öneriler için çok teşekkür ederim. Gerçekten minnettarım!
Nasserr

3

Son zamanlarda soruyla karşılaştım ve Stub ile Driver arasındaki bu karşılaştırmanın gerçekten açık ve yararlı olduğunu fark ettim :

Temel olarak, saplamalar ve sürücüler, kendilerini ve kabul ettikleri parametreleri bildirmekten başka hiçbir şey yapmayan rutinlerdir. Kodun geri kalanı daha sonra bu parametreleri alabilir ve bunları girdi olarak kullanabilir.

+ --------- + ------------------------------- + ------- ------------------------ +
| | Saplama | Sürücü |
+ --------- + ------------------------------- + ------- ------------------------ +
| Türü | Sahte kodlar | Sahte kodlar |
+ --------- + ------------------------------- + ------- ------------------------ +
| Kullanılan | Yukarıdan Aşağıya Entegrasyon | Aşağıdan Yukarıya Entegrasyon |
+ --------- + ------------------------------- + ------- ------------------------ +
| Amaç | Üst | Alt |
| | kod seviyeleri, ne zaman | kod seviyeleri, ne zaman |
| | kodun alt seviyeleri | kodun üst seviyeleri |
| | henüz geliştirilmedi. | henüz geliştirilmedi. |
+ --------- + ------------------------------- + ------- ------------------------ +
| Örnek | A ve B bileşenlerdir. | A ve B bileşenlerdir. |
| | A ---> B | A ---> B |
| | | |
| | A geliştirildi. | A'nın hala geliştirilmesi gerekiyor.
| | B'nin hala geliştirilmesi gerekiyor. | B geliştirildi. |
| | Bu nedenle, saplama kullanılır | Bu nedenle sürücü kullanılır |
| | onu taklit etmek için B'nin yerine. | A yerine taklit etmek |
| | | |
| | A ---> Saplama | Sürücü ---> B |
+ --------- + ------------------------------- + ------- ------------------------ +

Gönderen Saplamasının ve Sürücü arasındaki Fark


0

Biraz araştırdıktan sonra ve kodlayıcı hayatım boyunca karşılaştığım saplama dosyalarına dayanarak, bir saplama dosyasının sadece bir dosyanın uygulanmasının tamamını veya bir kısmını içeren bir dosya olduğunu söyleyebilirim. Geliştiricilerin kodlamaya başlamasına yardımcı olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.