Führen Sie Unit-Tests nur unter Windows ausJava

Java-Forum
Anonymous
 Führen Sie Unit-Tests nur unter Windows aus

Post by Anonymous »

Ich habe eine Klasse, die native Windows-API-Aufrufe über JNA durchführt. Wie kann ich JUnit-Tests schreiben, die auf einer Windows-Entwicklungsmaschine ausgeführt, aber auf einem Unix-Build-Server ignoriert werden?

Ich kann das Host-Betriebssystem einfach mit System.getProperty("os.name") abrufen

Ich kann in meinen Tests Schutzblöcke schreiben:

Code: Select all

@Test public void testSomeWindowsAPICall() throws Exception {
if (isWindows()) {
// do tests...
}
}
Dieser zusätzliche Standardcode ist nicht ideal.

Alternativ habe ich eine JUnit-Regel erstellt, die die Testmethode nur unter Windows ausführt:

Code: Select all

  public class WindowsOnlyRule implements TestRule {
@Override
public Statement apply(final Statement base, final Description description) {
return new Statement() {
@Override
public void evaluate() throws Throwable {
if (isWindows()) {
base.evaluate();
}
}
};
}

private boolean isWindows() {
return System.getProperty("os.name").startsWith("Windows");
}
}
Und dies kann erzwungen werden, indem ich dieses annotierte Feld zu meiner Testklasse hinzufüge:

Code: Select all

@Rule public WindowsOnlyRule runTestOnlyOnWindows = new WindowsOnlyRule();
Beide Mechanismen sind meiner Meinung nach insofern mangelhaft, als sie auf einem Unix-Rechner stillschweigend passieren. Es wäre schöner, wenn sie zur Ausführungszeit irgendwie mit etwas Ähnlichem wie @Ignore markiert werden könnten

Hat jemand einen alternativen Vorschlag?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post