2013-08-05 18 views
6

Kullanmakta olduğum statik yöntemlerden biri, iki şey yapıyor. Bazı veriler döndürür, ancak aynı zamanda kendisine iletilen argüman nesnesini de değiştirir. Bu güncellenmiş argüman nesnesi daha sonra kodda kullanılır.doAnswer statik yöntemler için - PowerMock

Geri dönüş davranışını gerçekleştirmek için PowerMock kullanıyorum.

İkinci bölümü tanımlamak için - giriş argümanını güncellemek için doAnswer metodunu tanımlıyorum ama çalışmıyor. Test etmeye çalıştığım yöntem böyle görünüyor. Ancak yukarıdaki 'Bitmemiş saplama burada tespit edildi' hatası veriyor. Connector üçüncü taraf bir sınıftır, bu nedenle davranışını denetleme hakkım yoktur.

Herhangi bir öneri, ne yanlış gidebilir?

cevap

11
PowerMockito.doAnswer(new Answer<Void>() { 
    /* ... */ 
}).when(Connector.newConnection(Mockito.any(ConnectorConfig.class))); 

when sorununuzdan kaynaklanıyor. Normal Mockito olarak, herhangi doAnswer/doReturn/vs çağrıyı kullanarak, bunu gibi when için dışarıda aramanınstubbing ediyoruz arama yapmak için vardır:

Mockito.doAnswer(new Answer<Void>() { 
    /* ... */ 
}).when(yourMock).callVoidMethod(); 
//   ^^^^^^ 

PowerMockito ayrıca statik yöntemlere bu çağrıları gerektirir böylece gibi in the next statement olur: documentation I linked aslında tutarsız olduğunu

PowerMockito.doAnswer(new Answer<Void>() { 
    /* ... */ 
}).when(Connector.class); Connector.newConnection(/*...*/); 
//     ^^^^^^ 

Not - literal sınıf imzalar boşuna gereklidir oysa dokümanlar, sıfır arg when ima benziyor yapabilmek. Bir an varsa, bu bir böcek olarak işaretlemek için iyi bir şey olabilir.

Zorunlu PSA: Bu jury's still out on that one olsa genel avoid mocking types you don't own için iyi bir fikirdir. Doc bağlantısı için

+0

thnx. Yarın deneyeceğim. – RandomQuestion

+0

Bu çalıştı. Bir hata yaptım. Konu işaret etmiyor ama ben onu düzenleyemiyorum. https://code.google.com/p/powermock/issues/detail?id=452&can=4&q=javadoc – RandomQuestion

İlgili konular