2017-06-16 3 views
2

Ceci est mon code que je voulais testerOverride ne fonctionne pas

@AdminAccessOnly 
@Repository 
public class TenResImpl extends TenAbstractResImpl implements TenIdRes { 

private Invocation request; 

protected void messageSend(String iD) { 

     Client client = utils.createClient(); 
     WebTarget webTarget = client.target(location).path("/testurl/" + tenantId); 
     Invocation.Builder requestBuilder = webTarget.request(); 
     Response response = null; 
      response = sendRequest(); //here I call the method!!!!!!! 

      if (response.getStatusInfo().getFamily() != Status.Family.SUCCESSFUL) { 
       // do something 
      } else { 
       //do something 
      } 
     } 



protected Response sendRequest() { 
    return request.invoke(); // here is the method which should be over written !!!! 
} 
} 

c'est mon autre méthode dans ma classe de test:

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = TestBoot.class) 
@EnableAutoConfiguration(exclude = Application.class) 
public class TenResImplTest extends TenResImpl{ 


@Autowired 
private TenResImpl tenResImpl; 

@Test 
public void testMessageSend() throws Exception {  

    this.tenResImpl.messageSend("132"); 

} 



@Override 
protected Response sendRequest() { 

    StatusType statusType = Mockito.mock(StatusType.class); 
    when(statusType.getFamily()).thenReturn(Status.Family.SUCCESSFUL); 
    Response response = Mockito.mock(Response.class); 
    return response; 
} 

} 

mais chaque fois que je déboguer à travers elle, je vois que il saute dans la méthode SendRequest() qui est dans la classe TenResImpl au lieu d'aller à ma classe de test ... ce que je fais mal? la visibilité d'accès est protégée sur les deux et les deux sont dans le même paquet

+0

Pouvez-vous montrer où vous l'appelez? – Mureinik

+0

oui j'ai ajouté quelques commentaires ci-dessus – Nali

+0

Pouvez-vous nous montrer l'instanciation de votre classe? –

Répondre

2

Il saute dans la méthode sendRequest() de TenResImpl parce que c'est là que vous l'appelez. Surcharger une méthode ne signifie pas que la méthode qui est écrasée ne sera plus jamais appelée.

Pour simplifier ce que vous avez écrit, imaginons 2 classes A et B, où B étend A. A a une méthode test(). Si vous remplacez test() dans B, l'appel test() sur un objet B exécutera la classe test(), mais appelant sur un objet A exécutera toujours la méthode de la classe A.

Maintenant, nous allons adapter cela à votre situation:

Votre TenResImpl est A et votre classe de test est B. Vous appelez sendRequest() dans TenResImpl alors, d'où ce que j'ai expliqué avant, il va dans la méthode de votre TenResImpl.

+0

donc je ne peux pas le tester sans appeler le sendRequest() de ma classe de test directement? – Nali

+0

Malheureusement non. J'espère que ma réponse m'a aidé! – Kaiserbogey