Jak można w programowy sposób upewnić się, że program został uruchomiony z włączonymi asercjami?
Jak można w programowy sposób upewnić się, że program został uruchomiony z włączonymi asercjami?
Przy uruchomieniu programu standardowo asercje są wyłączone. Aby je włączyć, trzeba uruchomić program z dodatkową opcją -enableassertions lub krócej -ea.
Aby programowo przetestować, czy asercje są włączone, można np. użyć następującego kodu:
boolean enabled = false;
try {
assert false;
} catch (AssertionError e) {
enabled = true;
}
System.out.println(enabled);
Ponieważ warunek asercji jest fałszywy, to o ile tylko asercje są włączone, to instrukcja assert spowoduje wyrzucenie wyjątku AssertionError, który zostanie przechwycony w sekcji catch i zmienna enabled przyjmie wartość true.
Ten sam efekt można uzyskać jeszcze prościej stosując następujący trick:
boolean enabled = false;
assert enabled = true;
System.out.println(enabled);
Jeśli asercje są wyłączone, to instrukcja assert zostanie zignorowana i zmienna enabled będzie miała wartość false.
W przeciwnym razie instrukcja zostanie wykonana. Zwróćmy uwagę na konstrukcję warunku asercji - jest w nim użyty operator podstawienia (pojedynczy znak =, a nie porównania ==).
W efekcie: