Ho una classe che effettua chiamate API native di Windows tramite JNA. Come posso scrivere test JUnit che verranno eseguiti su un computer di sviluppo Windows, ma verranno ignorati su un server di sviluppo Unix?Esegui test di unità solo su Windows
posso facilmente ottenere il sistema operativo host utilizzando System.getProperty("os.name")
posso scrivere blocchi di guardia nel mio test:
@Test public void testSomeWindowsAPICall() throws Exception {
if (isWindows()) {
// do tests...
}
}
Questo codice aggiuntivo piastra della caldaia non è l'ideale.
In alternativa ho creato una regola JUnit che gira solo il metodo di prova su Windows:
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");
}
}
E questo può essere applicata con l'aggiunta di questo campo annotato alla mia classe di test:
@Rule public WindowsOnlyRule runTestOnlyOnWindows = new WindowsOnlyRule();
Entrambi questi meccanismi sono carenti a mio parere in quanto su una macchina Unix passeranno silenziosamente. Sarebbe più bello se potessero essere contrassegnati in qualche modo al momento dell'esecuzione con qualcosa di simile a @Ignore
Qualcuno ha un suggerimento alternativo?
Questa è esattamente la funzionalità che stavo cercando. Grazie. – darrenmc