2011-01-13 8 views
3

hier ist mein Szenario. In meinen Junit-Tests muss ich an vielen Stellen Benutzername, Beschreibung, URL, ungültige URL usw. angeben. Also habe ich diese Werte fest codiert. Es ist nicht gut, überall hart zu codieren. Also möchte ich diese Werte an einen zentralen Ort (eine Datei) verschieben. Und ich habe einige Datenanbieter sagen, DP. Ich kann DP.getUserName(), DP.getUrl() usw. an Stellen aufrufen, wo diese Werte benötigt werden. Außerdem möchte ich einen Pool von verschiedenen Benutzernamen, URLs, ungültigen URLs usw. haben. Wenn ich getUrl aufrufen, wird es zufällig aus dem Pool abholen.Datei basierte Datenprovider

Was ich mir vorstellen kann, ist die Verwendung von java.util.Properties, um Eigenschaften aus einer Datei zu laden, und jedes Mal, wenn ich anrufe, gebe ich nur einen Eintrag zufällig zurück.

Jeder bessere Ansatz, um dieses Ziel zu erreichen? Vielen Dank.

Antwort

0

Eine Eigenschaftendatei ist eine gute Idee, ermöglicht es Ihnen auch nicht Code neu zu kompilieren, wenn ein Element ändert. Das getUrl, das aus einem Pool zieht, ist in Ordnung.

Wenn Sie jedoch mehrere getUserName(), getErrorURL(), getDatabaseName() usw. haben, die alle eine Zeichenfolge zurückgeben. Sie sollten möglicherweise darüber nachdenken, diese einzelnen Schlüssel/Wert-Eigenschaften in einer Zuordnung in Ihrer DP-Klasse zu speichern und einige öffentliche Listen für den Zugriff auf Variablen bereitzustellen.

Etwas wie:

private Map<PROP, String> map; 
public enum PROP{ USERNAME, PASSWORD, DATABASE_NAME}; 

public String getProperty(PROP key){ 
    return map.get(key); 
} 

Auf diese Weise müssen Sie nicht eine neue Methode und Variable für jede Eigenschaft hinzufügen;

+0

danke für den Kommentar. Wie unterstütze ich einen Pool von Benutzernamen, URLs usw.? Da die Eigenschaftendatei ein Schlüssel/Wert-Paar ist. Die Property-Datei sieht folgendermaßen aus: USERNAME1 = Tom – David

+0

Eine Möglichkeit besteht darin, ein Trennzeichen zu verwenden und sie beim Laden zu teilen: INVALIDS = bob | tom | randy – jzd

+1

Wenn Sie diese Map instanziieren, werden Sie sie wahrscheinlich verwenden wollen eine'EnumMap'. – dkarp

Verwandte Themen