2014-04-17 3 views
0

je une classe:Mockito fonction statique simulée

class Abc 
{ 
    public static int fun() { 
      // some stuff 
      return 5; 
    } 
} 

J'ai une autre classe:

class Pqr 
{ 
    public int funToTest() { 
      return Abc.fun(); 

    } 
} 

Je teste cela comme suit en utilisant Mockito:

class PqrTest { 
    public int testFunToTest() { 
      Abc ob = Mockito.mock(Abc.class); 
      Mockito.when(ob.fun()).thenReturn(12); 
    } 
} 

test maintenant comme Cela fonctionne bien. Mais puisque fun() est une méthode statique, je ne pense pas qu'elle devrait être appelée via un objet. Comment puis-je retourner 12, sans appeler l'implémentation réelle de la méthode fun() en utilisant mockito. Aussi je ne veux pas appeler fun() par un objet simulé de classe Abc, comme je l'ai fait ci-dessus.

+2

Si vous voulez vraiment simuler une méthode statique, vous pouvez utiliser PowerMock (cela étend EasyMock et Mockito). – Chris311

Répondre

1

Ce que vous voulez réaliser est possible en utilisant des outils comme PowerMock. En même temps, vous devez savoir qu'il existe un code qui est simplement "faux" lorsque vous le regardez du point de vue du test. Si c'est le cas, alors la bonne approche consiste à changer le code jusqu'à ce qu'il soit facile à tester. La plupart du temps, vous trouverez que le code devient "meilleur" par ce changement: Moins buggé, plus facile à comprendre & maintenir, plus facile à utiliser.

+0

Donc, cela signifie qu'il n'est pas possible de le faire en utilisant mockito. D'accord. Pourquoi pensez-vous que ce code est erroné par rapport à la perspective des tests? Aussi peut-on me suggérer un bon lien pour étudier Mockito. –

+0

Un test doit être capable de changer tout ce qui est nécessaire pour simuler le genre de situations dans lesquelles vous voulez que votre code survive. Donc, si vous avez des variables globales ou des fonctions ('public final static') et que vous devez changer leur comportement pendant un test, vous devriez vraiment les remplacer par quelque chose qui peut être facilement échangé. –