2013-12-15 4 views
0

У меня есть следующий класс наследство синглтон, что я пытаюсь тест:PowerMockito: как издеваются частный член Singleton

public class Controller { 
    private handler = HandlerMgr.getHandler(); 
    public static final instance = new Controller(); 

    private Controller() { 

    } 

    public int process() { 
    List<Request> reqs = handler.getHandler(); 
    .... 
    } 
} 

Я попытался следующие, но безрезультатно:

@Test 
    public void test() { 
    mockStatic(HandlerMgr.class); 
    when(Handler.getHandler()).theReturn(expectedRequests); 
    int actual = Controller.instance.process(); 
    // ... assertions ... 
    } 

проблема в том, что HandlerMgr.getHandler() все еще вызывается, я хочу обойти его и издеваться над ним.

+0

Что проблема? – mc10

+0

проблема в том, что HandlerMgr.getHandler() все еще вызывается, я хочу обойти его и издеваться над ним. – Attilah

+0

Ваш контроллер вызывает getHandler, но задает ожидание на GetRequest? Вероятно, это почему-то вызван реальный метод? – Spock

ответ

0

В соответствии мой комментарий

Ваш контроллер вызывает getHandler но установить ожидания на GetRequest? Это возможно, почему вызван реальный метод?

И, ссылаясь на документацию, кажется, что вам не хватает ожиданий на заглушке, которую вы создали mockStatic.

Согласно документации PowerMock ... См. Ниже.

@Test 
public void testRegisterService() throws Exception { 
    long expectedId = 42; 

    // We create a new instance of test class under test as usually. 
    ServiceRegistartor tested = new ServiceRegistartor(); 

    // This is the way to tell PowerMock to mock all static methods of a 
    // given class 
    mockStatic(IdGenerator.class); 

    /* 
    * The static method call to IdGenerator.generateNewId() expectation. 
    * This is why we need PowerMock. 
    */ 
    expect(IdGenerator.generateNewId()).andReturn(expectedId); 

    // Note how we replay the class, not the instance! 
    replay(IdGenerator.class); 

    long actualId = tested.registerService(new Object()); 

    // Note how we verify the class, not the instance! 
    verify(IdGenerator.class); 

    // Assert that the ID is correct 
    assertEquals(expectedId, actualId); 
} 

https://code.google.com/p/powermock/wiki/MockStatic

Поскольку ваши ожидания/установки отсутствует grtHandler, реальный способ получить еще называется.

0

Добавить @PrepareForTest ({}) HandlerMgr.class к тестовому классу .Вы

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