2016-04-20 2 views
1

J'essaye de me moquer d'une classe de singleton (SessionDataManager) où j'obtiens une instance en appelant la méthode statique getInstance() mais toutes les tentatives semblent retourner la valeur null.comment est-ce que je moque la méthode statique qui fournit une instance de la classe étant raillée avec JMockit?

J'ai essayé

@Mocked SessionDataManager sessionDataManager; 

ou

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

       return invocation.getInvokedInstance(); 
      } 
     }; 

-je obtenir le même résultat = null;

Quelqu'un peut-il suggérer une solution?

Merci

Répondre

1

je suggère d'avoir un regard sur le documentation, mais voici deux tests exemple complet:

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

Merci beaucoup Rogerio – cheyrico2

0

Jetez un oeil à la classe attentes:

new Expectations() { 

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

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

Merci vous https://stackoverflow.com/users/6231002/aura vous aider est grandement apprécié. Je reçois toujours une exception de pointeur Null à la déclaration des attentes. – cheyrico2

+0

Vous êtes les bienvenus. Si vous avez résolu le problème, pouvez-vous accepter la réponse en cliquant sur la coche à gauche de la réponse? Je vous remercie. – Aura

+0

https://stackoverflow.com/users/6231002/aura J'ai essayé d'utiliser le code exactement comme vous l'avez fourni mais je reçois toujours l'exception du pointeur nul – cheyrico2