JUnit çerçevesini bağlama

Java kodunu test etmek için JUnit adında harika bir çerçevemiz var . Harika çalışıyor, sürekli güncelleniyor, çok popüler ve tabii ki Intellij IDEA onunla çok sıkı bir şekilde bütünleşmiş durumda.

Artık herkes bu çerçevenin beşinci sürümünü kullanıyor - JUnit 5 , ancak birçok projede hala dördüncü sürümünü bulabilirsiniz. Çok farklı değiller ama yine de en sonuncusuna bir göz atacağız. Aktif olarak test yazmaya başladığınızda seçimimi onaylayacağınızı düşünüyorum.

Peki projeye JUnit nasıl eklenir? Maven'i öğrendikten sonra kolay olacak: sadece bu kodu pom.xml'nize ekleyin:

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
	<version>5.8.1</version>
	<scope>test</scope>
</dependency>

Bu arada, Maven'in testlerinizi derleme aşamasında ( test aşaması ) çalıştırmasını istiyorsanız , pom.xml dosyasına bir parça daha eklemeniz gerekir:

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
	<version>2.19.1</version>
	<dependencies>
    	<dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-surefire-provider</artifactId>
            <version>1.3.2</version>
    	</dependency>
	</dependencies>
</plugin>

@Test notu

Diyelim ki test etmek istediğiniz bir sınıfınız var. Bunu yapmanın en iyi yolu nedir? Bir örnekle başlayalım, çünkü soyut bir sınıfı test etmek zordur :)

Toplama, çıkarma, çarpma ve bölme olmak üzere 4 temel işlemi gerçekleştirebilen bir Hesap Makinesi sınıfımız olduğunu varsayalım . Hadi yazalım:

class Calculator {
    	public int add(int a, int b) {
        	return a+b;
    	}

    	public int sub(int a, int b) {
        	return a-b;
    	}

    	public int mul (int a, int b) {
        	return a*b;
    	}

    	public int div(int a, int b) {
        	return a/b;
    	}
}

Bu sınıfın metotlarını test etmek istiyoruz. Asla bilemezsiniz, gelecekte bir şeyleri değiştirirler ve her şey çalışmayı durdurur. Bunun için nasıl testler yazabiliriz?

Başka bir sınıf oluşturmamız gerekiyor. Bunu yapmak için genellikle aynı adı alırlar ve Test son ekini eklerler . Her yöntem için en az bir test yöntemi eklemelisiniz. Örnek:

class CalculatorTest {
   	@Test
    	public void add() {
    	}
   	@Test
    	public void sub() {
        }
   	@Test
    	public void mul() {
    	}
   	@Test
    	public void div() {
    	}
}

Eskiden yöntem adının test sözcüğüyle başlaması gerekliliği vardı , ancak bu artık gerekli değil.

JUnit test örnekleri

CalculatorTest sınıfımızın yöntemlerini test edeceğimiz bazı örnekler yazalım :

class CalculatorTest {
   	@Test
    	public void add() {
        	Calculator calc = new Calculator();
        	int result = calc.add(2, 3);
        	assertEquals(5, result);
    	}

   	@Test
    	public void sub() {
        	Calculator calc = new Calculator();
        	int result = calc.sub(10, 10);
        	assertEquals(0, result);
        }

   	@Test
    	public void mul() {
        	Calculator calc = new Calculator();
        	int result = calc.mul(-5, -3);
        	assertEquals(15, result);
    	}

   	@Test
    	public void div() {
        	Calculator calc = new Calculator();
        	int result = calc.div(2, 3);
        	assertEquals(0, result);
    	}
}

Tipik bir JUnit testi böyle görünür. İlginç olan: burada AssertEquals() özel yöntemi kullanılır : Adındaki eşittir sözcüğüyle belirtildiği gibi, kendisine iletilen parametreleri karşılaştırır.

AssertEquals() işlevine iletilen parametreler eşit değilse, yöntem bir istisna atar ve test başarısız olur. Bu istisna, diğer testlerin çalışmasını engellemez.