SORU
1 EYLÜL 2010, ÇARŞAMBA


Mock nesneler amacı nedir?

Birim testi için yeni duyuyorum, ve ben sürekli kelimeleri 'mock nesneleri bir sürü etrafında atılmış. Uzun lafın kısası, birileri sahte nesneler ve genellikle birim testleri yazarken ne için kullanılırlar açıklayabilir mi?

CEVAP
2 EYLÜL 2010, PERŞEMBE


Birim testi için yeni diyorsan ve "uzun lafın kısası", deneyeceğim bir meslekten olmayan bir örnek. mock nesneler için sorulan

Birim Testi

Bu sistem için test: birim düşünün

cook <- waiter <- customer

Onun genellikle kolay cook gibi: düşük seviye bir bileşen test öngörülüyor

cook <- test driver

Test sürücüsü sadece farklı yemekler sipariş ve yemek verir, Her sipariş için doğru çanak doğrular.

Diğer bileşenlerin davranışını kullanan orta bir bileşen testi için daha zor, garson,. Naif bir test garson aşçı bileşen bileşen test ettik aynı şekilde test olabilir:

cook <- waiter <- test driver

Test sürücüsü farklı yemekler sipariş ve garson döner, doğru yemek emin olun. Ne yazık ki, o garson bileşenin bu test cook bileşenin doğru davranış da bağlı olabilir anlamına gelir. Bu bağımlılık daha da kötüsü, eğer aşçı bileşeni olan herhangi bir test düşmanca özellikleri gibi belirli olmayan davranış (menü içerir şefin sürpriz bir yemek), bir sürü bağımlılıkları (cook won't cook olmadan onun tüm personel), ya da çok kaynakları (bazı yemekler gerektiren pahalı malzemeler veya bir saatte yemek).

Garson bir test bu yana, ideal olarak, sadece garson, aşçı değil test etmek istiyoruz. Özellikle, garson, aşçı düzgün Müşteri sipariş veriyor ve doğru müşteri için bir aşçıdır yemekleri getirir emin olmak istiyoruz.

Birim testi daha iyi bir yaklaşım testi (garson) Fowler calls test doubles (dummies, stubs, fakes, mocks) ile altında bileşeni yalıtmak için, yani bağımsız olarak test birimleri anlamına gelir.

    -----------------------
   |                       |
   v                       |
test cook <- waiter <- test driver

Burada, test aşçı "" test sürücüsü ile. işbirliği içinde. İdeal olarak, test edilen sistem test aşçı kolayca (injected) garson iş için Üretim kodu (garson kodu değiştirmeden, örneğin değiştirmeden ikame edilebilir şekilde tasarlanmıştır.

Mock Nesneler

Şimdi, test aşçı (test) çift farklı şekilde uygulanabilir:

  • sahte bir aşçı - biri donmuş yemekler ve bir mikrodalga kullanarak bir aşçı gibi
  • saplama aşçı - her zaman sosisli sandviç sipariş ne olursa olsun veren bir sosisli sandviç Satıcısı, ya da
  • sahte bir aşçı - bir komut dosyası, aşağıdaki gizli polis gizli bir operasyonda bir aşçı gibi davranarak.

Fowler's article for the more specifics about fakes vs stubs vs mocks vs dummies, ama şimdi için, sahte bir aşçı odaklanalım bakın.

    -----------------------
   |                       |
   v                       |
mock cook <- waiter <- test driver

Ünitenin büyük bir bölümünü garson bileşen test garson aşçı bileşeni ile etkileşim nasıl odaklanır . Alay tabanlı bir yaklaşım doğru etkileşim ne olduğunu tam olarak belirten ve ters gittiğinde tespit odaklanır.

Mock nesne test sırasında ne olacak önceden (kendi yöntemleri arama çağrılacak olan örneğin, vb.) bilir ve alay nesnesi tepki gerekiyordu (nasıl sağlanacak gibi) bilir. Bu sahte gerçekten ne olması gerektiğini farklı olup olmadığını gösterir. Özel sahte bir nesne, her bir test beklenen davranış için kodlanmış olabilir, ama alaycı bir çerçeve böyle bir davranış belirtimi açıkça ve kolayca gösterilir doğrudan test durumda olmasını sağlamak için çaba göstermektedir.

Konuşma alay tabanlı bir test çevreleyen Bu gibi görünebilir:

test sürücüsüiçinalay pişirin:sosisli sandviç sipariş bekliyoruz ve onu bu kukla sosisli ver cevap

test sürücüsü(müşteri olarak poz)garson:Sosisli lütfen istiyorum
garsoniçinalay pişirin:1 sosisli sandviç lütfen
alay pişiriniçingarson:sipariş: 1 sosisli hazır (kukla hot dog garsona verir)
garsoniçintest sürücüsü:işte hot dog (test sürücüsü boş sosisli verir)

test sürücüsü: TEST BAŞARILI!

Ama garson yeni olduğu için, bu olabilir ne

test sürücüsüiçinalay pişirin:sosisli sandviç sipariş bekliyoruz ve onu bu kukla sosisli ver cevap

test sürücüsü(müşteri olarak poz)garson:Sosisli lütfen istiyorum
garsoniçinalay pişirin:1 hamburger lütfen
alay pişirindurur test:Sosisli sandviç sipariş beklemem söylendi!

test sürücüsünotlar sorun: TEST BAŞARISIZ oldu! - garson siparişi değiştirdi

ya

test sürücüsüiçinalay pişirin:sosisli sandviç sipariş bekliyoruz ve onu bu kukla sosisli ver cevap

test sürücüsü(müşteri olarak poz)garson:Sosisli lütfen istiyorum
garsoniçinalay pişirin:1 sosisli sandviç lütfen
alay pişiriniçingarson:sipariş: 1 sosisli hazır (kukla hot dog garsona verir)
garsoniçintest sürücüsü:burada Fransız patates kızartması (başka bir sipariş Fransız kızartması sürücü test verir)

test sürücüsübeklenmedik notlar patates kızartması: TEST BAŞARISIZ oldu! garson yanlış yemek verdi

Saplama tabanlı zıt bir örnek bu ile gitmek olmadan açıkça alay nesneleri ve koçanları arasındaki farkı görmek zor olabilir, ama bu cevabı çok uzun bir yol olduğunu zaten :-)

Ayrıca bu çok basit bir örnek olduğunu ve çerçeveler alay bileşenlerden beklenen davranış oldukça karmaşık bazı özellikleri için kapsamlı testler desteklemek için izin unutmayın. Mock nesneler, malzeme ve daha fazla bilgi için alay çerçeveler var.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • the one am radio

    the one am r

    6 Mayıs 2006
  • WK

    WK

    9 Ocak 2006
  • Xcode programming tutorials

    Xcode progra

    17 EYLÜL 2006