2014-08-31 23 views
10

Özel statik yöntem anotherMethod() ile uğraşmaya çalışıyorum. İştePowerMockito ile özel statik yöntemi nasıl kullanabilirim?

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

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

aşağıdaki kodu bakın bana

@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"); 
     }  
} 

Ama bunu çalıştırmak her kiremit bu istisna olsun sınav kodudur

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

ben alay ile yanlış bir şey yapıyorum varsayalım şey. Herhangi bir fikri nasıl tamir edebilirim?

cevap

23

Bunun için PowerMockito.spy(...) ve PowerMockito.doReturn(...)'u kullanabilirsiniz.

@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"); 
    } 
} 

Eğer size yardımcı Umut şu şekildedir: Üstelik, test sınıfında PowerMock koşucu belirtmek gerekir.

anotherMethod() anotherMethod (parametresi) gibi herhangi bir argüman alırsa
-1

Ben kullandığınız PowerMock hangi sürümünü emin değilim, ancak daha sonra sürümü ile, sen, gerçekten sorunlu olduğu PowerMock kullanarak ve fakir bir işaretidir bulmak bu söyleyen @RunWith(PowerMockRunner.class) @PrepareForTest(Util.class)

kullanarak olmalıdır tasarımı. Tasarımı değiştirmek için zamana/fırsata sahipseniz, önce bunu yapmayı deneyeceğim.

+0

sayılı. – Aaron

4

, yöntemin doğru çağırma olacaktır: benim açıklamaları kullanmak gerekir TestNG` `için

PowerMockito.doReturn("abc").when(Util.class, "anotherMethod", parameter); 
İlgili konular