2016-04-20 8 views
1

Ich versuche, eine Singleton-Klasse (SessionDataManager) zu verspotten, wo ich eine Instanz durch Aufrufen der statischen GetInstance() -Methode abrufen, aber alle Versuche scheinen Null zurückzugeben.Wie spot ich die statische Methode, die eine Instanz der Klasse bietet, die mit JMockit verspottet wird?

Ich habe versucht,

@Mocked SessionDataManager sessionDataManager; 

oder

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

       return invocation.getInvokedInstance(); 
      } 
     }; 

ich das gleiche Ergebnis = null erhalten;

Kann jemand eine Lösung vorschlagen?

Dank

Antwort

1

ich am documentation, Hinschauen vorschlagen würde, aber hier sind zwei komplette Beispiel Tests:

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

Vielen Dank Rogerio – cheyrico2

0

einen Blick auf Expectations' Klasse nehmen:

new Expectations() { 

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

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

Danke https://stackoverflow.com/users/6231002/aura Sie helfen wird sehr geschätzt. Ich bekomme immer noch eine Null-Zeiger-Ausnahme bei der Erklärung der Erwartungen. – cheyrico2

+0

Gern geschehen. Wenn Sie das Problem gelöst haben, akzeptieren Sie bitte die Antwort, indem Sie auf das Häkchen links neben der Antwort klicken. Vielen Dank. – Aura

+0

https://stackoverflow.com/users/6231002/aura Ich habe versucht, mit dem Code genau, wie Sie zur Verfügung gestellt, aber ich bekomme immer noch die Nullzeiger Ausnahme – cheyrico2

Verwandte Themen