2013-04-18 39 views
6

Mockito'yu kullanarak basit bir ayarlama yöntemini nasıl kullanacağımı anlayamıyorum. Mockito'da setterhohod'un üzerine nasıl yazılır?

class MyClass { 
    private SomeObject someObject; 

    public void setSomeObject(SomeObject someObject) { 
     this.someObject = someObject; 
    } 

    public someObject getSomeObject() { 
     return someObject; 
    } 
} 

Şimdi sadece "setSomeObject" çağrıldığında "SomeObject" yeni bir örneği ayarlandığını bunu istiyorum: Ben şu dersim var. Ayrıca setter içindeki parametre göz ardı edilmelidir.

MyClass mockedClass = mock(MyClass.class); 
when(mockedClass.setSomeObject([ignoreWhatsInHere])) 
    .then(mockedClass.setSomeObject(new SomeObject(); 

Ancak, bunun için çalışma sözdizimi almak gibi olamaz:

Böyle bir şey lazım. Sahtekarları yalnızca getters() kullanarak çalışmaya başlatabilirim, çünkü bir şeyleri geri verebilirim. Ama aynı şeyi setters() için nasıl yapacağımı anlayamıyorum.

Tüm yardımlar takdir edilmektedir.

+0

Neden ihtiyacın var? Tam olarak ne elde etmek istiyorsun? – axtavt

+0

hmm bu işe yaramaz, çünkü bir iade geçersiz için geçerli değildir:/ – Lonelyisland

+0

iyi bir şey setSomeObject() böyle bir şekilde çağrılır: myClass.setSomeObject (someWeirdFunction.whichreturnsfinallySomeObject()). Yani aslında, sette bir çağrı olup olmadığını bilmek istiyorum ve sonra nesneyi kendim belirledim. – Lonelyisland

cevap

5

doThrow()|doAnswer()|doNothing()|doReturn() set ailesini, ayarlayıcılar dahil olmak üzere void döndüren yöntemleri test ederken uygun bir eylem gerçekleştirmek için kullanabilmeniz gerekir. Bunun yerine

when(mockedObject.someMethod()).thenReturn(something) 

arasında öyle olmadığını korkunç zarif olsa, özel bir cevap nesneyi döndürmek için doAnswer() kullanmak istiyorsunuz ve bir saplama kullanarak daha iyi olabilir: İade etmek çalışıyorsanız

doAnswer(new Answer() { 
    public Object answer(InvocationOnMock invocation) { 
      //whatever code you want to run when the method is called 
      return null; 
    }}).when(mockedObject).someMethod(); 
} 

Aynı alıcı çağrısı farklı değerler, ayrıca mockito'nun ardışık tıkama çağrılarına bakmak isteyebilirsiniz, bu da örneğin bir yöntemin ilk çağrısında hata yapmanıza ve sonra ikinci çağrıdan bir nesneyi döndürmenize olanak tanır. Bunların her ikisi hakkında daha fazla ayrıntı için bkz.

İlgili konular