# [maven] property als parameter



## DEvent (20. Sep 2011)

Hallo,
ich habe eine Bibliothek, die Werte von einem angeschlossenem (über ein COM Port) Gerät auslesen kann. Um diese zu testen muss also ein Gerät eingeschlossen sein, und ich braucht noch den Geräte-String. Z.B. Unter Linux ist es /dev/ttyUSB0, unter Windows COM3. Kann man diesen String irgendwie über Maven an meinen Test schicken?

Also ich würde Maven so aufrufen: mvn test -Ddevice=/dev/ttyUSB0
Funktioniert das mit dem maven-surefire-plugin? Siehe auch How to retrieve maven properties inside a JUnit test? - Stack Overflow

Wie würde das mit Eclipse funktionieren? Wo kann ich da den String übergeben? Als "VM arguments"?

Danke.


----------



## nillehammer (20. Sep 2011)

> Wie würde das mit Eclipse funktionieren? Wo kann ich da den String übergeben? Als "VM arguments"?


Wie ist das gemeint? Willst Du (einzelne) JUnit-Tests aus Eclipse heraus starten? Oder meinst Du Die Anwendung ansich mit main?

Falls Du das erste meinst, das geht imho garnicht. Ein Ausweg wäre hier eine Klasse mit Konstanten oder das Einlesen eines properites-Files.

Falls Du das zweite meinst, im Menü Run -> Run Configurations klicken, die Klasse mit der main-Methode auswählen und im Reiter "Arguments" die Argumente entweder als Program Arguments (wird zum Parameter der main-Methode) oder als VM-Argumens eintragen.


----------



## DEvent (20. Sep 2011)

nillehammer hat gesagt.:


> Wie ist das gemeint? Willst Du (einzelne) JUnit-Tests aus Eclipse heraus starten?



Also z.Z. ist es so, dass ich meine JUnit Tests habe. Dort habe ich eine Konstante, static final String device = "/dev/ttyUSB0"; Nun ist aber so, dass sich das Gerät-String ändert. Dann will ich ja nicht überall diese Konstante anpassen wollen.

Ich will das am liebsten als Parameter übergeben. An a) maven, als eine Property und b) in Eclipse, wenn ich meine Tests manuell starte.

Ich könnte es auch als eine Datei lösen, aber als Parameter wäre es mir lieber. Weil, theoretisch ändert sich der String von Computer zu Computer. In Windows ist er COM3, oder COM5 oder COM1, in Linux ist er mal ttyUSB0 oder ttyUSB1 oder ttyUSB2.

Wenn man da eine Datei hat, wird es schwierig mit dem SCM (aka git). Dann muss man die Datei auf ignore setzen, oder jeder ändert die Datei. Also am besten als Parameter.

Ich hoffe das beantwortet deine Frage.


----------



## maki (20. Sep 2011)

Du meinst keine isolierten Unittests, du meinstn Integrationstests, diese immer in ein eigenes Mavenmodul auslagern.


----------



## DEvent (20. Sep 2011)

maki hat gesagt.:


> Du meinst keine isolierten Unittests, du meinstn Integrationstests, diese immer in ein eigenes Mavenmodul auslagern.



Ja, gut, aber wie nützt mir das?

Dann habe ich ein Modul für Linux und Windows. Aber deswegen kann sich das Gerät-String trotzdem ändern. Wie gesagt in Windows ist er COM3, oder COM5 oder COM1, in Linux ist er mal ttyUSB0 oder ttyUSB1 oder ttyUSB2.


----------



## nillehammer (20. Sep 2011)

Ich hab jetzt nochmal bei meiner Heiminstallation von Eclipse geschaut (Helios). Dort kann man unter RunConfigurations auch für einen JUnit-Testcase "-D"-System Properties angeben. Ich habe folgenden (dämlichen) TestCase geschrieben:

```
import junit.framework.TestCase;

public class TestTest extends TestCase {
	public final void testTest() {	
		System.out.println(System.getProperty("comport"));
	}
}
```
Erst habe ich ihn direkt gestartet. Ausgabe war -wie erwartet- null. Dann hab ich den TestCase mit der rechten Maustaste angeklickt und RunAs -> RunConfigurations ausgewählt. In dem dann erscheinenden Dialog konnte ich den TestCase  auswählen und dafür im Reiter "Arguments" ein -Dcomport=COM3 eingeben. Danach hat der TestCase "COM3" ausgegeben.


----------



## maki (20. Sep 2011)

DEvent hat gesagt.:


> Ja, gut, aber wie nützt mir das?
> 
> Dann habe ich ein Modul für Linux und Windows. Aber deswegen kann sich das Gerät-String trotzdem ändern. Wie gesagt in Windows ist er COM3, oder COM5 oder COM1, in Linux ist er mal ttyUSB0 oder ttyUSB1 oder ttyUSB2.


Du willst ein einziges Modul.
Aber mit mind. 2 Profilen, dann müsstest du noch rausfinden welcher Port der richtige ist.


----------



## DEvent (20. Sep 2011)

nillehammer hat gesagt.:


> Ich hab jetzt nochmal bei meiner Heiminstallation von Eclipse geschaut (Helios). Dort kann man unter RunConfigurations auch für einen JUnit-Testcase "-D"-System Properties angeben. Ich habe folgenden (dämlichen) TestCase geschrieben:
> 
> ```
> import junit.framework.TestCase;
> ...



Danke. Ich werde das mal morgen ausprobieren.


----------

