2016-03-03 2 views
3

Je suis en train de vérifier si mon API est disponible dans un test unitaire, pour être sûr qu'il répond avec 200.Android Tests locaux vs instrumenté test

Maintenant, mon problème est que je ne suis pas vraiment sûr quand utiliser Local Test et quand je dois utiliser Android Tests d'instrumentation. Je sais que je dois utiliser des tests instrumentés pour tester l'interface utilisateur, mais comment tester le point de terminaison? J'utilise Retrofit2 pour la communication. Et essayé de tester Endpoint de 2 façons avec des tests locaux.

Exemple 1 (synchrone, ne fonctionne pas)

public class EndpointTest { 

    EndpointApi api; 
    SimpleInjection simpleInjection; 

    @Before 
    public void setUp() { 
     simpleInjection = new SimpleInjection(); 
     api = simpleInjection.getEndpointApi(); 
    } 

    @Test 
    public void endpoint_1_isAvailable() { 
     Call<ApiResponse> rootCall = api.getRoot(); 
     try { 
      int reponseCode = rootCall.execute().code(); 
      Assert.assertEquals(200, reponseCode); 

     } catch (IOException e) { 
      Assert.fail(); 
     } 
    }   
} 

Exemple 2 (asynchrone, ne fonctionne)

public class EndpointTest { 

    EndpointApi api; 
    SimpleInjection simpleInjection; 

    @Before 
    public void setUp() { 
     simpleInjection = new SimpleInjection(); 
     api = simpleInjection.getEndpointApi(); 
    } 

    @Test 
    public void endpoint_2_isAvailable() { 
    Call<ApiResponse> rootCall = api.getRoot(); 

     rootCall.enqueue(new Callback<ApiResponse>() { 
      @Override 
      public void onResponse(Call<ApiResponse> call, Response<ApiResponse> response) { 
       Assert.assertEquals(200, response.code()); 
      } 

      @Override 
      public void onFailure(Call<ApiResponse> call, Throwable t) { 
       Assert.fail(); 
      } 
     }); 
    }   
} 

Dois-je utiliser Android Instrumentation test pour le mode asynchrone?

+1

vous avez des titres synchrones et asynchrones mélangés, à partir de l'exemple de code 1 semble synchrone tandis que l'exemple 2 semble asynchrone – Bhargav

+0

Oui, c'est vrai. Déjà corrigé. Merci – shadox

Répondre

1

La décision d'exécuter vos tests sur une machine virtuelle Java locale sur votre ordinateur de développement ou sur un périphérique/émulateur Android n'est pas basée sur le fait que votre code est synchrone ou non. Habituellement, vous ne voulez exécuter que des tests unitaires localement, car c'est beaucoup plus rapide et cela vous permet d'utiliser TDD. Vos tests font des requêtes réseau, donc ce ne sont pas des tests unitaires par exemple, car ils dépendent du serveur - ce sont des tests d'intégration. Il est préférable d'exécuter des tests d'intégration sur un appareil Android pour obtenir de meilleurs commentaires.