2013-02-01 8 views
27

Bir sınıf statik yöntemlerle alay kuruyorum. Bunu @Before ekli JUnit kurulum yönteminde yapmak zorundayım.PowerMock, statik bir yöntemle alay, THEN tüm diğer statiklerde gerçek yöntemleri çağırıyor

Amacım, gerçekte alay ettiğim yöntemler için hariç, gerçek yöntemlerini çağırmak üzere sınıfı ayarlamaktır. Temelde

:

@Before 
public void setupStaticUtil() { 
    PowerMockito.mockStatic(StaticUtilClass.class); 

    when(StaticUtilClass.someStaticMethod(antString())).thenReturn(5); // mock out certain methods... 

    // Now have all OTHER methods call the real implmentation??? How do I do this? 
} 

İçine çalıştırıyorum sorun null değeri ile sağlanan eğer StaticUtilClass içinde yöntem public static int someStaticMethod(String s) maalesef bir RuntimeException atar olmasıdır.

@Before 
public void setupStaticUtil() { 
    PowerMockito.mockStatic(StaticUtilClass.class, CALLS_REAL_METHODS); // Default to calling real static methods 

    // The below call to someStaticMethod() will throw a RuntimeException, as the arg is null! 
    // Even though I don't actually want to call the method, I just want to setup a mock result 
    when(StaticUtilClass.someStaticMethod(antString())).thenReturn(5); 
} 

Ben tüm diğer statik yöntemlere sonra gerçek yöntemleri çağırmak için varsayılan Cevap ayarlamalısınız:

Yani basitçe aşağıdaki gibi varsayılan cevap olarak gerçek yöntemleri çağırmadan bariz rota gidemez Ben alay konusu ile ilgileniyorum yönteminden sonuçları alay ediyorum.

Bu mümkün mü?

cevap

50

Neye bakıyorsunuz kısmi alay denir.

PowerMock'te mockStaticPartial yöntemini kullanabilirsiniz. Ayrıca

PowerMockito.stub(PowerMockito.method(StaticUtilClass.class, "someStaticMethod")).toReturn(5); 

@PrepareForTest(StaticUtilClass.class) 
görmüyorum
+0

ya bir de unutmayın: tanımladığınız sadece yöntemini saplama ve değişmeden diğer bırakacaktır Stubbing kullanabilirsiniz PowerMockito yılında

PowerMockito sınıfımda stub() veya mockStaticPartial() yöntemi. 1.5 Sürümü. Benim sürüm 1.9.5 Mockito sınıfında, burada bir stub() yöntemi görüyorum: http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html#stub(T) ancak bulduğum belgeleri okudum this: http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html#when(T) notu, ne zaman(), kullanımdan kaldırılmış bir saplama (Object) ** 'nin devamıdır? Bu yöntemin artık kullanılmadığını düşünmeyin ve ne olursa olsun ihtiyacım olanı yapmayacağım. –

+0

mockStaticPartial, EasyMock için tanımlanmıştır - Mockito için açıkça sorduğunuzu anlamadım - http://powermock.googlecode.com/svn/docs/powermock-1.5/apidocs/org/powermock/api/easymock/PowerMock. html – zibi

+1

stub, PowerMockito'nun bir üst sınıfı olan MemberModifier'da tanımlanmıştır - işte burada! - http://powermock.googlecode.com/svn/docs/powermock-1.5/apidocs/org/powermock/api/support/membermodification/MemberModifier.html#stub%28java.lang.reflect.Method%29 – zibi

İlgili konular