SORU
21 Ocak 2013, PAZARTESİ


Nasıl mockito ne zaman geliyor() işe çağırma?

Aşağıdaki Mockito deyimi verilen:

when(mock.method()).thenReturn(someValue);

Nasıl Mockito bu alay, belirli bir alay için kullanılan bir şey oluşturma hakkında gitmek yok.() yöntem bildirimi ne zaman dönüş değeri geçecek()? Bu CGLib bazı şeyler kullanır, ama bunun teknik olarak nasıl yapıldığını bilmek ilgi olacağını düşünüyorum.

CEVAP
21 Ocak 2013, PAZARTESİ


Kısa cevap, bir örnek, sonuç mock.method() olacak bir tip uygun boş değer; mockito kullanır yönlendirme üzerinden proxy, yöntem, durdurma, ve paylaşılan bir örneği MockingProgress sınıf için olup olmadığını belirlemek için bir çağırma yöntemi bir alay olduğu için stubbing veya yeniden mevcut bir saplama davranış yerine geçen bilgi hakkında stubbing) dönüş değeri bir alay yöntemi.

Dakika mockito kodlarına birkaç mini-analizi aşağıdaki gibidir. Not, bu çok kaba bir açıklama, oyun içinde bir sürü detay var. source on github kendinizi kontrol etmenizi öneririm.

Sınıf Mockito Sınıfı mock yöntemi kullanarak sahte ilk ne zaman, ne olacağını aslında

  1. Mockito.mock 34**delege.alay, parametre olarak varsayılan ayarlar dalga geçiyor.
  2. MockitoCore.mock 35**delege.createMock
  3. MockUtil sınıf ClassPathLoader sınıf MockMaker Bir örnek model oluşturmak için kullanır. Varsayılan olarak, CgLibMockMaker sınıfı kullanılır.
  4. CgLibMockMaker bir sınıf alay oluşturmak işleyen JMock, ClassImposterizer ödünç kullanır. Anahtar parçaları 'mockito sihirli' kullanılır MethodInterceptor kullanılan oluşturmak için sahte: mockito MethodInterceptorFilter ve bir zincir MockHandler örnekleri de dahil olmak üzere bir örnek MockHandlerImpl. Yöntem ve avcı geçirir çağırmaları için MockHandlerİmpl örneği, uygulayan iş mantığı uygulanması gereken bir yöntem çağrılır Parlamentosu'nda (yani, arama diye bir cevap olduğunu kaydetti zaten, belirlenmesi durumunda çağırma temsil eden yeni bir saplama, vb. Varsayılan devlet eğer bir saplama zaten yöntemi çağrılan için kayıtlı değilse, yazın uygun birboşdeğer döndürülür.

Şimdi, diyelim ki sizin örnek kod bakın:

when(mock.method()).thenReturn(someValue)

İşte bu kod çalıştırılacak sipariş:

  1. mock.method()
  2. when(<result of step 1>)
  3. <result of step 2>.thenReturn

Anahtar anlayış ne oluyor ne olur yöntemi alay çağrılır: yöntem ve avcı geçirilen bilgi hakkında yöntemini çağırma ve delegelere zinciri MockHandler örnekleri, sonunda temsilci MockHandlerImpl#handle. MockHandlerImpl#handle, sırasında sahte işleyicisi OngoingStubbingImpl bir örneğini oluşturur ve MockingProgress örnek paylaşılan geçirir.

when yöntemi method(), çağırma sonra çağrıldığında aynı sınıfı stub() yöntemi çağrıları MockitoCore.when, delegeler. Bu yöntem method() alay çağırma içine yazdı ve onu döndüren MockingProgress paylaşılan örneğinden devam eden stubbing ayıklar. Sonra thenReturn yöntem OngoingStubbing örnek denir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • PlayStation

    PlayStation

    16 Aralık 2005
  • Ricardo Cerqueira

    Ricardo Cerq

    28 Mayıs 2008
  • SoundHound

    SoundHound

    8 Mart 2006