2017-02-06 4 views
0

Ich habe einige Tests eingerichtet, die ich vom Terminal aus ausführen muss, aber ich muss in der Lage sein, zu wählen, auf welche URL ich für meine API-Aufrufe statt Live verweisen möchte. Kann ich das im Terminal machen?URL dynamisch ändern Android Studio

Im Moment habe ich eine Zeichenfolge in meiner Constants.java Datei, die ich auf verschiedene zeigen, aber ich muss es von Terminal anscheinend tun! Also meine Zeichenfolge ist private static String BASE_URL = "http://www.website.com/" das ist die Zeichenfolge, die ich im Terminal ändern möchte.

Ich habe Folgendes geschrieben, aber es scheint nicht zu fragen, ob ich etwas eingeben soll.

@Before 
    public void setURLForAPICalls() { 
     Scanner url_input = new Scanner(System.in); 
     System.out.print("Enter the server you wish to test against: "); 
     Constants.BASE_URL = url_input.next(); 
} 

Auch wenn es ein Fall ist es der Einrichtung in einem @Before Testverfahren oder etwas nach oben? Ich versuche seit Tagen herauszufinden, dass es unmöglich ist ...

Vielen Dank im Voraus!

+0

Was meinst du mit _apparently_? Es wäre hilfreich, wenn Sie Ihren Code posten, damit wir sehen können, was passiert. – px06

+0

Sie können Argumente an die Hauptmethode übergeben und von diesen analysieren. Relevante Frage hier: http://stackoverflow.com/questions/890966/what-is-string-args-parameter-in-main-method-java –

+0

@ px06 von anscheinend, ich aha. Ich habe keinen Code zum Posten, denn ich habe keine Ahnung, wie es geht! – BilalMH

Antwort

1

Aus Ihrer Frage, die Sie haben erklärt, dass in Constants.java Sie die folgende Aussage haben:

private static String BASE_URL = "http://www.website.com/"; 

Wenn Sie testen, Sie versuchen, diese BASE_URL zu ändern, was Sie nicht tun können. Es ist nicht nur ein private Mitglied oder Constants, aber es ist auch ein Mitglied final, was bedeutet, dass der Wert davon nicht geändert werden kann.

Sie können Instanziieren Constants erstellen, wenn Ihre App ausgeführt wird, und Sie können es entweder als TEST oder als RELEASE Version angeben.

etwas wie das folgende ausreichend sein:

public enum RUN_TYPE { 
    TEST, 
    RELEASE; 
} 

Sie können Ihre Constants Klasse ändern etwas wie das sein, folgende:

public class Constants { 

    private static final instance = new Constants(); 

    private RUN_TYPE type; 

    private String BASE_URL; 

    // More urls here 

    private Constants(){ 

    } 

    public void setRunType(RUN_TYPE type){ 
     this.type = type; 
     if(type == RUN_TYPE.RELEASE){ 
      BASE_URL = "http://release.api/endpoints"; 
     } else if(type == RUN_TYPE.TEST){ 
      BASE_URL = "http://test.api/endpoints"; 
     } 
    } 

    public String getBaseUrl(){ 
     return BASE_URL; 
    } 

    public static Constants getInstance(){ 
     return instance; 
    } 

    // More getters here 

} 

Dies ist eine Singleton-Klasse, die die Werte enthalten wird benötigt wie Sie angeben.

Im Release-Modus können Sie anrufen:

Constants.getInstance().setRunType(RUN_TYPE.RELEASE); 

Und beim Testen Sie, wie etwas tun:

@RunWith(AndroidJUnit4.class) 
public class TestSomething { 


    @BeforeClass 
    public static void runOnce(){ 
     Constants.getInstance().setRunType(RUN_TYPE.TEST); 
    } 

    @Test 
    public void testOne(){ 
     // tests 
    } 
} 
0

Sie Parameter übergeben kann, während ein Test durch eine CLI ausgeführt wird.

Zum Beispiel, wenn Sie die URL übergeben werden sollen, während die Tests ausgeführt wird, können Sie wie etwas tun:

am instrument -w -r -e URL "http://www.google.com" -e debug false -e class com.example.android.TestClassName com.example.android.test/android.support.test.runner.AndroidJUnitRunner 

Um den Wert des gleichen in Ihren Tests zu holen, können Sie verwenden:

InstrumentationRegistry.getArguments().getString("URL") 

Für weitere Informationen können Sie sich über -e hier lesen: Test from the Command Line

Verwandte Themen