2014-08-31 10 views
10

मैं निजी स्थैतिक विधि anotherMethod() नकली करने की कोशिश कर रहा हूं। नीचेमैं PowerMockito के साथ निजी स्थैतिक विधि का नकल कैसे कर सकता हूं?

public class Util { 
    public static String method(){ 
     return anotherMethod(); 
    } 

    private static String anotherMethod() { 
     throw new RuntimeException(); // logic was replaced with exception. 
    } 
} 

यहाँ कोड देखें मुझे परीक्षण कोड

@PrepareForTest(Util.class) 
public class UtilTest extends PowerMockTestCase { 

     @Test 
     public void should_prevent_invoking_of_private_method_but_return_result_of_it() throws Exception { 

      PowerMockito.mockStatic(Util.class); 
      PowerMockito.when(Util.class, "anotherMethod").thenReturn("abc"); 

      String retrieved = Util.method(); 

      assertNotNull(retrieved); 
      assertEquals(retrieved, "abc"); 
     }  
} 

लेकिन हर टाइल मैं इसे चलाने मैं इस अपवाद है

java.lang.AssertionError: expected object to not be null 

मुझे लगता है कि मैं मजाक के साथ कुछ गलत कर रहा हूँ सामान। कोई विचार मैं इसे कैसे ठीक कर सकता हूं?

उत्तर

23

इसके लिए, आप PowerMockito.spy(...) और PowerMockito.doReturn(...) का उपयोग कर सकते हैं।

@PrepareForTest(Util.class) 
@RunWith(PowerMockRunner.class) 
public class UtilTest { 

    @Test 
    public void testMethod() throws Exception { 
     PowerMockito.spy(Util.class); 
     PowerMockito.doReturn("abc").when(Util.class, "anotherMethod"); 

     String retrieved = Util.method(); 

     Assert.assertNotNull(retrieved); 
     Assert.assertEquals(retrieved, "abc"); 
    } 
} 

आशा है कि यह आप में मदद करता है: इसके अलावा, आप अपने परीक्षण वर्ग में PowerMock धावक निर्दिष्ट करने के लिए, इस प्रकार की है।

-1

मुझे यकीन है कि PowerMock के किस संस्करण का उपयोग कर रहे नहीं कर रहा हूँ, लेकिन बाद के संस्करण के साथ, आप @RunWith(PowerMockRunner.class) @PrepareForTest(Util.class)

इस कह रही है का उपयोग करना चाहिए, मैं PowerMock का उपयोग कर पाते हैं वास्तव में समस्याग्रस्त किया जा करने के लिए और एक गरीब की एक निश्चित संकेत डिज़ाइन। यदि आपके पास डिज़ाइन बदलने का समय/अवसर है, तो मैं पहले कोशिश करता हूं और करता हूं।

+0

'के लिए TestNG' मैं अपने एनोटेशन का उपयोग की जरूरत नहीं।। – Aaron

4

anotherMethod() anotherMethod (पैरामीटर) के रूप में किसी भी तर्क लेता है, विधि का सही मंगलाचरण हो जाएगा:

PowerMockito.doReturn("abc").when(Util.class, "anotherMethod", parameter); 
संबंधित मुद्दे