2016-04-20 7 views
1

Я пытаюсь высмеять класс singleton (SessionDataManager), где я получаю экземпляр, вызывая статический метод getInstance(), но все попытки, похоже, возвращают значение null.Как мне высмеять статический метод, который предоставляет экземпляр класса, издевающегося над JMockit?

Я попытался

@Mocked SessionDataManager sessionDataManager; 

или

 new MockUp<SessionDataManager>(){ 
      @Mock 
      public SessionDataManager getInstance(Invocation invocation) { 

       return invocation.getInvokedInstance(); 
      } 
     }; 

я получаю тот же результат = NULL;

Может ли кто-нибудь предложить решение?

Благодаря

ответ

1

Я хотел бы предложить, взглянув на documentation, но здесь два полных пример испытания:

public final class ExampleTest { 
    public static final class SessionDataManager { 
     private static final SessionDataManager instance = new SessionDataManager(); 
     public static SessionDataManager getInstance() { return instance; } 
     public void doSomething() { throw new UnsupportedOperationException("to do"); } 
    } 

    @Test 
    public void mockingASingleton(@Mocked SessionDataManager mockInstance) { 
     SessionDataManager singletonInstance = SessionDataManager.getInstance(); 

     assertSame(mockInstance, singletonInstance); 
     singletonInstance.doSomething(); // mocked, won't throw 
    } 

    @Test 
    public void mockingASingletonWithAMockUp() { 
     new MockUp<SessionDataManager>() { 
      // no point in having a @Mock getInstance() here 
      @Mock void doSomething() { /* whatever */ } 
     }; 

     SessionDataManager singletonInstance = SessionDataManager.getInstance(); 
     singletonInstance.doSomething(); // redirects to the @Mock method, won't throw 
    } 
} 
+0

Большое вам спасибо Rogerio – cheyrico2

0

Взгляните на класс ожиданий:

new Expectations() { 

    Singleton singleton; 
    { 
     Singleton.getInstance(); returns(singleton); 
     singleton.valueFromSingleton(); returns(1); 
    } 
}; 

Entity entity = new Entity(); 
assertEquals(1, entity.valueFromEntity()); 
+2

Спасибо https://stackoverflow.com/users/6231002/aura, которым вы помогаете, очень ценится. Я все еще получаю исключение Null указателя при объявлении ожиданий. – cheyrico2

+0

Добро пожаловать. Если вы решили проблему, можете ли вы принять ответ, нажав на галочку слева от ответа? Спасибо. – Aura

+0

https://stackoverflow.com/users/6231002/aura Я пробовал использовать код именно так, как вы его предоставили, но я все еще получаю исключение нулевого указателя – cheyrico2