2014-06-24 48 views
5

Bazı birim testlerimin JMock'u kullanarak Mockito'yu kullanmasına ve birkaç tökezlemeye çalıştığını deneyerek deniyorum. Benim testlerde İlkMockito vs JMock

Bu esas yöntemi olarak adlandırılır ve aynı zamanda bir konserve değeri döndürür olan doğrular

contextMockery.checking(new Expectations() {{ 
     oneOf(dateUtilityService).isBeforeToday(URGENT_DATE); 
      will(returnValue(true)); 
    }}); 

aşağıdaki şekilde tek bir adımda meydana JMock doğrulaması kullanan ve saplama dönen. IsBeforeToday yöntemi ARACIYORSA ve aynı zamanda true değerindeki hazır değerimi döndürürse test başarısız olur. Mockito kullanırken Oysa ben yöntemi çağrıldığını doğrulamak zorunda ve sonra aşağıdaki gibi oldukça fazla yinelenen olan ayrı adımda benim konserve değeri döndürmek:

doReturn(true).when(dateUtilityService).isBeforeToday(URGENT_DATE); 
    verify(dateUtilityService).isBeforeToday(URGENT_DATE); 

tek adımda bunu yapmanın bir yolu var mı?

İkincisi, beklentilerimin bir kısmına bir yöntem çağrısı listesi eklemeyi unutursam, JMock, "Açıklanamayan bir davet istisnası" ile sınamayı geçersiz kılar; oysa, açık bir şekilde doğrulamadığım sürece, Mockito testten mutlu bir şekilde geçecektir. Sahte arama yönteminin asla gerçekleşmemesi gerektiği, bu doğru mu (yanlış görünüyor)? Anlaşılmayan bağımlılıklara beklenmedik yöntem çağrıları yapılırsa, mockito'nun sınava girmesini söylemenin bir yolu var mı?

+0

http://site.mockito.org/mockito/docs/current/org/mockito/Mockito.html#8 görüyor musunuz? Sözdizimi, jMock’lara daha yakındır: “yeni Beklentiler() {{dateUtilityService.isBeforeToday (URGENT_DATE); sonuç = true; }}; '. –

cevap

5

1.

bir yöntem yöntem genellikle gerekli değildir doğrulamak çağrı saplama zaman - sen gerçekleşebilir senin durumda bir şey (dönüş değerine dayalı eylemi kontrol etmelidir falan iade edilecektir zaman dateUtilityService döner gerçek - yerine mock ile etkileşimi doğrulama kontrol

mockito belgelerine de bu bahsediyor http://site.mockito.org/mockito/docs/current/org/mockito/Mockito.html#2

2.

Bu aslında yol açar.. kırılgan testler ve mockito ile şeyler yapmanın bir yolu değildir. Bu yüzden bu davranışı kurmanın bir yolu yoktur.

ayrıca JMockit için testler dönüştürme dikkate yaptı, Sadece meraktan

+0

Bu nedenle, saplama dönüş türünüzde bir değer değiştirdiğinde bazı durumlarda (gösterdiğim gibi) anlamlıdır. Ancak, sorularımın ikinci kısmında bahsettiğim gibi, testimde bir yöntem çağrısını (herhangi bir dönüş değeri değiştirmeyebilir) unutmayı unutursam, bunu bilmek isterim. Aramayı durdurun ya da hiç bir zaman çağrılmaması gerektiğini sınayın. –

+1

@ClintonBosch Tüm unstubbed çağrıları algılamak için, test yönteminizin sonunda 'enableNoMoreInteractions()' öğesine bir çağrı ekleyebilirsiniz. –

+0

Mockito'yu kullanmaya başladığımdan beri (2007'den beri JMock kullanmıştım ya da daha önce ... Hatırlamıyorum), iş arkadaşlarının işbirliğini aramayı unutduğu yeşil testleri farkettim. entegrasyon testlerine sahip olmak daha iyidir ". Belki de, JMock gibi bir araç kullanmak ve Mockito gibi zayıf tasarım araçlarını kullanmak yerine başka bir şekilde "kırılgan testlerden" kaçınmaya çalışmak daha iyidir. – sixro