1

J'ai configuré une constante dans build.gradle de l'application que j'ai développée. Il s'agit d'une constante "End-Point" pour les appels d'API. Lorsque je développe dans l'environnement de développement, l'application appelle un «point final», lorsque je développe dans l'environnement de production, l'application appelle un autre «point final». Maintenant, le problème vient, lorsque je développe les tests pour l'application, la configuration ne fonctionne pas pour ramasser le point final correctement. Quelqu'un peut-il m'aider?Configuration ProductFlavors

buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     buildConfigField STRING, API_URL, '"https://end-point-production/"' 
    } 
    debug { 
     buildConfigField STRING, API_URL, '"https://end-point-dev/"' 
    } 
} 

productFlavors { 
    ui_tests { 
     buildConfigField STRING, API_URL, '"http://end-point-tests/"' 
    } 
} 

public class BaseController { 

// Service url. 
protected static final String API_URL = BuildConfig.API_URL; 

/** 
* Crates a basic retrofit request. 
* 
* @return Retrofit request. 
*/ 
public static Retrofit getRetrofit() { 
    OkHttpClient client = new OkHttpClient(); 
    client.setConnectTimeout(5, TimeUnit.SECONDS); 
    client.setReadTimeout(15, TimeUnit.SECONDS); 
    client.setWriteTimeout(5, TimeUnit.SECONDS); 

    return new Retrofit.Builder() 
      .baseUrl(API_URL) 
      .client(client) 
      .addConverterFactory(GsonConverterFactory.create(new GsonBuilder() 
        .excludeFieldsWithoutExposeAnnotation() 
        .create())) 
      .build(); 
    } 
} 


@Before 
public void setUp() throws Exception { 
    server = new MockWebServer(); 
    server.start(8681); 

    OkHttpClient client = new OkHttpClient(); 
    client.setConnectTimeout(5, TimeUnit.SECONDS); 
    client.setReadTimeout(15, TimeUnit.SECONDS); 
    client.setWriteTimeout(5, TimeUnit.SECONDS); 

    new Retrofit.Builder() 
      .baseUrl(API_URL) 
      .client(client) 
      .addConverterFactory(GsonConverterFactory.create(new GsonBuilder() 
        .excludeFieldsWithoutExposeAnnotation() 
        .create())) 
      .build(); 
} 

UiTests Environment

Répondre

1

Vous pouvez essayer de faire comme ceci:

Il y a une saveur supplémentaire

productFlavors { 
    non_test { 
    } 
    ui_tests { 
     buildConfigField STRING, API_URL, '"http://end-point-tests/"' 
    } 
} 

applicationVariants.all { variant -> 
     println("Iterating variant: " + variant.getName()) 

      if (variant.getName() == "ui_testsRelease") { 
       buildConfigField STRING, API_URL, '"https://end-point-production/"' 
      } else if (variant.getName() == "ui_testsDebug") { 
       buildConfigField STRING, API_URL, '"http://end-point-tests/"' 

      } else if (variant.getName() == "non_testRelease"){ 
       buildConfigField STRING, API_URL, '"https://end-point-production/"' 
      } else if (variant.getName() == "non_testDebug") { 
       buildConfigField STRING, API_URL, '"https://end-point-dev/"' 

      } 
     } 

ou par exemple (il semble un peu mieux):

déplacer justeui_testsdeproductFlavorsàbuildTypes

buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     buildConfigField STRING, API_URL, '"https://end-point-production/"' 
    } 
    debug { 
     buildConfigField STRING, API_URL, '"https://end-point-dev/"' 
    } 
    ui_tests { 
     buildConfigField STRING, API_URL, '"http://end-point-tests/"' 
    } 
} 
+0

J'ai choisi d'utiliser dans mon application 3 buildTypes, Larguez, debug et uiTest. Mon application a un autre problème, quand je change dans mon application le BuildVariant pour uiTest les bibliothèques de test (Espresso et JUnit) cessent de fonctionner. Peux-tu m'aider avec ceci? – Duk

+0

Je vous suggère de créer une nouvelle question sur SO à ce sujet. Vous faites des questions bien conçues. –