2013-12-05 3 views
4
class StaticClass { 
    public static String a(){ return "a"; } 
    public static String ab(){ return a()+"b"; } 
} 

Я хочу издеваться StaticClass::a так, что она возвращает "x" и вызов StaticClass.ab() результатов в "xb" ...Mock один статический метод с использованием PowerMock и TestNG

Я нахожу это очень трудно в PowerMock и TestNG. ..


точный код я тестирую RIGH Сейчас:

class StaticClass { 
    public static String A() { 
     System.out.println("Called A"); 
     throw new IllegalStateException("SHOULD BE MOCKED AWAY!"); 
    } 

    public static String B() { 
     System.out.println("Called B"); 
     return A() + "B"; 
    } 
} 

@PrepareForTest({StaticClass.class}) 
public class StaticClassTest extends PowerMockTestCase { 

    @Test 
    public void testAB() throws Exception { 
     PowerMockito.spy(StaticClass.class); 
     BDDMockito.given(StaticClass.A()).willReturn("A"); 
     assertEquals("AB", StaticClass.B()); // IllegalStateEx is still thrown :-/ 
    } 

} 

У меня есть Maven зависимостей от:

<artifactId>powermock-module-testng</artifactId> 
and 
<artifactId>powermock-api-mockito</artifactId> 
+1

Вы пытались сделать как в [PowerMock документации] (http://code.google. com/p/powermock/wiki/TestNG_usage) описано? – sigito

+1

@sigito ДА! Я обновлю пример, чтобы показать вам код, который мне нужен, чтобы высмеять – Parobay

+0

Вы, должно быть, потеряли вызов метода 'mockStatic'. – sigito

ответ

1

Я думаю, что это может быть достигнуто с частичным Мок.

PowerMock.mockStaticPartial(Mocked.class, "methodToBeMocked"); 

Это может быть полезным: http://avricot.com/blog/index.php?post/2011/01/25/powermock-%3A-mocking-a-private-static-method-on-a-class

+0

Это звучит нормально. Честно говоря, мне очень не нравится задавать метод ... по имени строки ** ... Это был бы ужас для поддержания без хорошей IDE. Любой способ издеваться, написав фактический код Java (другими словами: макет, как обычный метод)? – Parobay

+0

Это хороший момент. Я думаю, вы также можете сделать это со шпионом. См. Http://stackoverflow.com/questions/4860475/powermock-mocking-of-static-methods-return-original-values-in-some-particula#answer-5063228 – abourg28

4

Почему бы не попробовать что-то вроде:

PowerMockito.mockStatic(StaticClass.class); 
Mockito.when(StaticClass.a()).thenReturn("x"); 
Mockito.when(StaticClass.ab()).thenCallRealMethod(); 
+0

Он использует TestNG, а не Mockito. – DLight

Смежные вопросы