17 Ocak 2021

Java Assertions

ile gökhan

Assertion, kodumuzda bir şeyin doğru olmasını beklediğimiz bir noktaya yerleştirdiğimiz mantıksal bir ifadedir. Bir assertion kod üzerindeki kusurların tespit edilmesine izin verir. Aşağıda kullanım şekli gösterilmiştir. test_değeri boolean bir değerdir. Assertion uygulamada default olarak etkin değildir. Assertion etkinleştirildiğinde ve boolean değer false ise; runtime zamanında bir AssertionError fırlatılır. Programın böyle bir hata yakalaması, programın sonlandırılmasına neden olur. Assertionlar isteğe bağlı olarak parantezler ve bir mesaj bulundurabilir.

assert test_değeri(boolean)

assert test_değeri(boolean) : mesaj (opsiyonel)

Bir assertion ifadesi 3 sonucu vardır: İlk olarak bir assertion devre dışı bırakılırsa, Java assertionu atlar ve koda devam eder. İkincisi; Assertion etkinleştirilirse ve boolean ifade true ise, assertion doğrulanmış olur ve uygulama çalışmaya devam eder. Üçüncü olarak; Asertion etkinleştirilmiş ve boolean ifade false ise, assertion geçersiz olur ve bir AssertionError hatası fırlatılır.

Assertion etkinleştirme/etkisiz hale getirme

Varsayılan olarak assert anahtar kelimesi runtime zamanda JVM tarafından yok sayılır. Assertionları etkinleştirmek için komut satırında -enableassertions yani -ea bayrağı seçilmelidir. Örneğin; java -ea test.java.

Bazen de uygulama için assertionları etkinleştirilir, ancakbazı pakaet veya sınıflar için devre dışı bırakmak isteyebiliriz. Java bunun için -disableassertion yani -da bayrağının seçilmesi gerekir.

Günümüzde ide üzerinden uygulama geliştirdiğimiz için bir assertion Eclipse üzerinden etkinleştirilmesi aşağıdaki gibidir :

Run -> Run Configurations tıklanır. Açılan pencerede Arguments tabı tıklanır. Burada VM arguments kısmına -ea yazmamız yeterlidir.

Aşağıdaki gibi basit bir assertion kullanımına bakalım:

public class AssertionSample {
 public static void main(String[] args) {
	int sayi = -10;
	assert sayi > 0;
	System.out.println(sayi);
}
}

Burada assertion ifademiz false döneceği için aşağıdaki gibi bize bir AssertionError hatası fırlatacaktır:

Exception in thread “main” java.lang.AssertionError
at assertion.AssertionSample.main(AssertionSample.java:4)