2017-10-19 17 views
0

J'ai la méthode ci-dessous que j'ai besoin de tester unitaire.Comment puis-je simuler l'instanciation d'un objet en utilisant une classe interne statique?

Comment puis-je simuler la création de l'objet LDUser ci-dessous?

public void isFeatureFlagOn(String featureFlagId, TransactionContext transContext, boolean defaultReturnState) 
    throws TAServiceException { 
     boolean returnState = defaultReturnState; 
     try { 
      LDUser ldUser = new LDUser.Builder(transContext.getAuthId()).build(); 
      returnState = ldClient.boolVariation(featureFlagId, ldUser, defaultReturnState); 
     } catch (Exception e) { 
      returnState = defaultReturnState; 
     } 

     if (!returnState) { 
      throw new TAServiceException("This service is not available", HttpStatus.NOT_FOUND); 
     } 
    } 
+0

Est-ce que [mon article ici] (https://github.com/mockito/mockito/wiki/Mocking-Object-Creation) est utilisé? –

Répondre

0

Ce n'est vraiment pas faisable à moins d'utiliser quelque chose comme PowerMock pour cela. Toutefois, vous pouvez envisager d'injecter le générateur LDUser afin que vous puissiez simuler le générateur lorsque vous appelez votre méthode en cours de test. Avec le constructeur simulacre, vous pouvez simuler comment il construit le simulacre LDUser instance que vous voulez. Ainsi, votre méthode de test ressemblerait à quelque chose comme:

// ... 
when(mockLdUserBuilder.build()).thenReturn(mockLdUser); 
classUnderTest.methodUnderTest(mockLdUserBuilder); 
// ... assert/verify stuff 
0

Vous pouvez créer une méthode de niveau package que vous pouvez utiliser pour injecter un constructeur moqué.

public void isFeatureFlagOn(...) throws TAServiceException { 
    boolean returnState = defaultReturnState; 
    try { 
     getBuilder(transContext.getAuthId()).build(); 
     ... 
    } 
    ... 
} 
//package method 
Builder getBuilder(int authId) { 
    return new LDUser.Builder(authId); 
} 

Et puis dans votre test, vous pouvez remplacer cette méthode.

@Mock 
LDUser.Builder builder; 

@Test 
public void test1() { 
    MyClass myClass = new MyClass() { 
    @Override 
    Builder getBuilder(int authId) { 
     return builder; 
    } 
    } 
    myClass.isFeatureFlagOn(...); 
    ... 
}