2015-12-16 20 views
10

aşağıdaki yöntemi düşünün: Bu kodu yazmadımYöntem çalıştırmadan yöntem çağrısı ve dönüş değeri nasıl atar?

public boolean isACertainValue() { 
     if(context.getValueA() != null && context.getValueA().toBoolean() == true) { 
     if(context.getType() != null && context.getType() == ContextType.certainType) { 
      return true; 
     } 
    } 
    return false; 
} 

, Cehennem gibi çirkin, tamamen overcomplicated ama onunla çalışmak zorunda.

Şimdi bu yönteme yapılan bir çağrıya dayanan bir yöntemi test etmek istiyorum. ben test etmek istiyorum vaka olduğu için

Mockito.when(spy.isACertainValue()).thenReturn(true);:

ben bu başa düşündüm.

Ama yine de yöntem-vücudu aradığını olarak çalışmıyor:/

Ben nullpointers olsun ya da daha doğrusu ben

misusing.WrongTypeOfReturnValue çizgisinde bir şey olsun; Boole, getValueA() tarafından döndürülemez.

Mockito.when(contextMock.getValueA()).thenReturn(new ValueA()); ve Mockito.when(contextMock.getType()).thenReturn(ContextType.certainType);

ama sonra ben mümkün görünmektedir olamaz bir nullpointer olsun: getValueA()

Yapmam (geçici bir çözüm olarak) çalıştı DEĞERİa KESİNLİK dönmelidir hata ayıklamak

Peki bu durumda bu nasıl yapılır?

+1

nasıl yapılacağını tam olarak, ama belki size testinde daha ileride gerektiğini DEĞERİa KESİNLİK iÇİNDE bir değer yoktur, bu yüzden de nesne, dönen sadece dönüş alay etmelidir (varsayılan) kurucu ile örneklenen bir örnek. – Stultuske

cevap

13

Eğer

Mockito.when(spy.isCertainValue()).thenReturn(true); 

isCertainValue() burada adlandırılan oluyor yöntem çağırıyoruz. Bu şekilde Java çalışır: Mockito.when argümanını değerlendirmek için, spy.isCertainValue() sonucunun değerlendirilmesi gerekir, böylece yöntemin çağrılması gerekir.

Mockito.doReturn(true).when(spy).isCertainValue(); 

Bu aynı alaycı etkisi olmaz ama yöntem bu ile çağrılacak olmaz: bunun olmasına istemiyorsanız

, sen the following construct kullanabilirsiniz.

+0

bu iğrençtir, ben o kadar çok bu programı nefret xD tho bir nullpointer olsun ... şimdi yolda daha iyiyim, teşekkür ederiz: X – Sorona

+0

Kırık bağlantı. Casus'u nerede kuruyorsun? – powder366

+0

Benim için çalıştı. NPE atmayı bıraktı. Teşekkürler Tunaki! – Dish

0

Bu kod doğrudur:

Mockito.when(contextMock.getType()).thenReturn(ContextType.certainType); 

Ama tanımlar olmalıdır alaycı bir değer tanımlayan etmemesi nedeniyle NullPointerException alıyorsanız, ben @Autowired tanımladığınızda de benim bağlam dosyasında Spring, kullanıyorum fasulye Ben öyle tanımlayın:

<bean id="contextMock" class="org.mockito.Mockito" factory-method="mock"> 
    <constructor-arg value="com.example.myspringproject.bean.ContextMock" /> 
</bean> 
İlgili konular