JUnit - Hızlı Kılavuz

Test, bir uygulamanın gereksinimlere göre çalıştığından emin olmak için işlevselliğini kontrol etme sürecidir. Birim testi, geliştirici düzeyinde resme gelir; tek bir varlığın (sınıf veya yöntem) test edilmesidir. Birim testi, bir yazılım şirketinin müşterilerine kaliteli ürünler sunmasına yardımcı olmada kritik bir rol oynar.

Birim testi iki şekilde yapılabilir - manuel test ve otomatik test.

Manuel Test Otomatik Test
Herhangi bir araç desteği olmadan manuel olarak test senaryosu yürütmek, manuel test olarak bilinir. Araç desteğini almak ve bir otomasyon aracı kullanarak test olaylarını yürütmek, otomasyon testi olarak bilinir.
Time-consuming and tedious - Test senaryoları insan kaynakları tarafından yürütüldüğü için çok yavaş ve yorucudur. Fast - Otomasyon, test durumlarını insan kaynaklarından önemli ölçüde daha hızlı çalıştırır.
Huge investment in human resources - Test senaryolarının manuel olarak yürütülmesi gerektiğinden, manuel testte daha fazla test uzmanına ihtiyaç vardır. Less investment in human resources - Test senaryoları, otomasyon araçları kullanılarak yürütülür, bu nedenle otomasyon testinde daha az sayıda test görevlisi gerekir.
Less reliable - İnsan hatalarını hesaba katması gerektiğinden, manuel test daha az güvenilirdir. More reliable - Otomasyon testleri kesin ve güvenilirdir.
Non-programmable - Gizli bilgileri almak için sofistike testler yazmak için programlama yapılamaz. Programmable - Test uzmanları, gizli bilgileri ortaya çıkarmak için karmaşık testler programlayabilir.

JUnit nedir?

JUnit, Java programlama dili için bir birim test çerçevesidir. Test odaklı geliştirmede çok önemli bir rol oynar ve topluca xUnit olarak bilinen bir birim test çerçevesi ailesidir.

JUnit, önce test edilebilecek ve sonra uygulanabilecek bir kod parçası için test verilerini ayarlamayı vurgulayan "önce test sonra kodlama" fikrini teşvik eder. Bu yaklaşım "biraz test edin, biraz kodlayın, biraz test edin, biraz kodlayın" gibidir. Programcının üretkenliğini ve program kodunun kararlılığını artırır, bu da programcı üzerindeki stresi ve hata ayıklamaya harcanan zamanı azaltır.

JUnit'in Özellikleri

  • JUnit, testleri yazmak ve çalıştırmak için kullanılan açık kaynaklı bir çerçevedir.

  • Test yöntemlerini tanımlamak için ek açıklamalar sağlar.

  • Beklenen sonuçları test etmek için iddialar sağlar.

  • Testleri çalıştırmak için test çalıştırıcıları sağlar.

  • JUnit testleri, kodları daha hızlı yazmanıza olanak tanır ve bu da kaliteyi artırır.

  • JUnit zarif ve basittir. Daha az karmaşıktır ve daha az zaman alır.

  • JUnit testleri otomatik olarak çalıştırılabilir ve kendi sonuçlarını kontrol eder ve anında geri bildirim sağlar. Test sonuçları raporunu manuel olarak taramanıza gerek yoktur.

  • JUnit testleri, test senaryolarını ve hatta diğer test setlerini içeren test paketleri halinde organize edilebilir.

  • JUnit, test sorunsuz çalışıyorsa yeşil olan bir çubukta test ilerlemesini gösterir ve bir test başarısız olduğunda kırmızıya döner.

Birim Test Vakası nedir?

Birim Test Vakası, kodun başka bir bölümünün (yöntem) beklendiği gibi çalışmasını sağlayan bir kod parçasıdır. İstenilen sonuçlara hızlı bir şekilde ulaşmak için bir test çerçevesi gereklidir. JUnit, Java programlama dili için mükemmel bir birim test çerçevesidir.

Resmi bir yazılı birim test senaryosu, bilinen bir girdi ve beklenen bir çıktı ile karakterize edilir ve test yürütülmeden önce üzerinde çalışılır. Bilinen girdi bir ön koşulu test etmeli ve beklenen çıktı bir son koşulu test etmelidir.

Her gereksinim için en az iki birim test senaryosu olmalıdır - bir pozitif test ve bir negatif test. Bir gereksinimin alt gereksinimleri varsa, her alt gereksinim, pozitif ve negatif olmak üzere en az iki test durumuna sahip olmalıdır.

Yerel Ortam Kurulumu

JUnit, Java için bir çerçevedir, bu nedenle ilk gereksinim, makinenizde JDK'nın kurulu olmasıdır.

Sistem gereksinimleri

JDK 1.5 veya üstü.
Hafıza Minimum gereklilik yok.
Disk alanı Minimum gereklilik yok.
İşletim sistemi Minimum gereklilik yok.

Adım 1: Makinenizde Java Kurulumunu Doğrulayın

Öncelikle konsolu açın ve üzerinde çalıştığınız işletim sistemine göre bir java komutu yürütün.

işletim sistemi Görev Komut
pencereler Komut Konsolunu Aç c: \> java sürümü
Linux Komut Terminalini Aç $ java sürümü
Mac Açık Terminal makine: ~ joseph $ java -version

Tüm işletim sistemleri için çıktıyı doğrulayalım -

işletim sistemi Çıktı
pencereler

java sürümü "1.8.0_101"

Java (TM) SE Çalışma Zamanı Ortamı (derleme 1.8.0_101)

Linux

java sürümü "1.8.0_101"

Java (TM) SE Çalışma Zamanı Ortamı (derleme 1.8.0_101)

Mac

java sürümü "1.8.0_101"

Java (TM) SE Çalışma Zamanı Ortamı (derleme 1.8.0_101)

Sisteminizde Java yüklü değilse, aşağıdaki bağlantıdan Java Yazılım Geliştirme Kitini (SDK) indirin https://www.oracle.com. Bu eğitim için Java 1.8.0_101 sürümünü yüklü sürüm olarak kabul ediyoruz.

Adım 2: JAVA Ortamını Ayarlayın

Yı kur JAVA_HOMEJava'nın makinenizde kurulu olduğu temel dizin konumunu gösteren ortam değişkeni. Örneğin.

işletim sistemi Çıktı
pencereler JAVA_HOME ortam değişkenini C: \ Program Files \ Java \ jdk1.8.0_101 olarak ayarlayın
Linux dışa aktar JAVA_HOME = / usr / local / java-current
Mac dışa aktar JAVA_HOME = / Kitaplık / Java / Ana Sayfa

Java derleyici konumunu Sistem Yoluna ekleyin.

işletim sistemi Çıktı
pencereler Dizeyi ekleyin C:\Program Files\Java\jdk1.8.0_101\bin sistem değişkeninin sonunda, Path.
Linux dışa aktarma PATH = $PATH:$JAVA_HOME / bin /
Mac gerekli değil

Komutu kullanarak Java kurulumunu doğrulayın java -version yukarıda açıklandığı gibi.

3. Adım: JUnit Arşivini İndirin

JUnit jar dosyasının en son sürümünü şuradan indirin: http://www.junit.org. Bu öğreticiyi yazarken Junit-4.12.jar dosyasını indirdik ve C: \> JUnit klasörüne kopyaladık.

işletim sistemi Arşiv adı
pencereler junit4.12.jar
Linux junit4.12.jar
Mac junit4.12.jar

Adım 4: JUnit Ortamını Ayarlayın

Yı kur JUNIT_HOMEJUNIT jar'ın makinenizde depolandığı temel dizin konumunu gösteren ortam değişkeni. Junit4.12.jar dosyasını JUNIT klasöründe sakladığımızı varsayalım.

Sr.No İşletim Sistemi ve Açıklama
1

Windows

JUNIT_HOME ortam değişkenini C: \ JUNIT olarak ayarlayın

2

Linux

JUNIT_HOME = / usr / local / JUNIT dışa aktar

3

Mac

dışa aktar JUNIT_HOME = / Kitaplık / JUNIT

Adım 5: CLASSPATH Değişkenini Ayarlayın

Yı kur CLASSPATH JUNIT akü konumunu işaret etmek için ortam değişkeni.

Sr.No İşletim Sistemi ve Açıklama
1

Windows

CLASSPATH ortam değişkenini% CLASSPATH%;% JUNIT_HOME% \ junit4.12.jar;.;

2

Linux

dışa aktar CLASSPATH = $CLASSPATH:$JUNIT_HOME / junit4.12.jar :.

3

Mac

dışa aktar CLASSPATH = $CLASSPATH:$JUNIT_HOME / junit4.12.jar :.

Adım 6: JUnit Kurulumunu Test Edin

TestJunit adında bir java sınıfı dosya oluşturun C:\>JUNIT_WORKSPACE

import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class TestJunit {
   @Test
	
   public void testAdd() {
      String str = "Junit is working fine";
      assertEquals("Junit is working fine",str);
   }
}

TestRunner adında bir java sınıfı dosya oluşturun C:\>JUNIT_WORKSPACE test senaryolarını yürütmek için.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestJunit.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

7. Adım: Sonucu Doğrulayın

Kullanarak sınıfları derleyin javac aşağıdaki gibi derleyici -

C:\JUNIT_WORKSPACE>javac TestJunit.java TestRunner.java

Şimdi sonucu aşağıdaki gibi görmek için Test Çalıştırıcısını çalıştırın -

C:\JUNIT_WORKSPACE>java TestRunner

Çıkışı doğrulayın.

true

JUnit bir Regression Testing Frameworkgeliştiriciler tarafından Java'da birim testi uygulamak ve programlama hızını artırmak ve kod kalitesini artırmak için kullanılır. JUnit Framework aşağıdakilerden biriyle kolayca entegre edilebilir -

  • Eclipse
  • Ant
  • Maven

JUnit Test Çerçevesinin Özellikleri

JUnit test çerçevesi aşağıdaki önemli özellikleri sağlar -

  • Fixtures
  • Test paketleri
  • Test koşucuları
  • JUnit sınıfları

Fikstür

Fixturestestleri çalıştırmak için temel olarak kullanılan bir dizi nesnenin sabit durumudur. Bir test fikstürünün amacı, sonuçların tekrarlanabilir olması için testlerin yürütüldüğü iyi bilinen ve sabit bir ortamın olmasını sağlamaktır. İçerir -

  • setUp () yöntemi, her test çağrısından önce çalışır.
  • Her test yönteminden sonra çalışan tearDown () yöntemi.

Bir örneğe bakalım -

import junit.framework.*;

public class JavaTest extends TestCase {
   protected int value1, value2;
   
   // assigning the values
   protected void setUp(){
      value1 = 3;
      value2 = 3;
   }

   // test method to add two values
   public void testAdd(){
      double result = value1 + value2;
      assertTrue(result == 6);
   }
}

Test Takımları

Bir test paketi birkaç birim test durumunu bir araya getirir ve birlikte çalıştırır. JUnit'te, süit testini çalıştırmak için hem @RunWith hem de @Suite ek açıklaması kullanılır. Aşağıda, TestJunit1 ve TestJunit2 test sınıflarını kullanan bir örnek verilmiştir.

import org.junit.runner.RunWith;
import org.junit.runners.Suite;

//JUnit Suite Test
@RunWith(Suite.class)

@Suite.SuiteClasses({ 
   TestJunit1.class ,TestJunit2.class
})

public class JunitTestSuite {
}
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

public class TestJunit1 {

   String message = "Robert";	
   MessageUtil messageUtil = new MessageUtil(message);
   
   @Test
   public void testPrintMessage() {	
      System.out.println("Inside testPrintMessage()");    
      assertEquals(message, messageUtil.printMessage());     
   }
}
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

public class TestJunit2 {

   String message = "Robert";	
   MessageUtil messageUtil = new MessageUtil(message);
 
   @Test
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Robert";
      assertEquals(message,messageUtil.salutationMessage());
   }
}

Test Koşucuları

Test çalıştırıcısı, test senaryolarını yürütmek için kullanılır. İşte test sınıfını varsayan bir örnekTestJunit zaten var.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestJunit.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

JUnit Sınıfları

JUnit sınıfları, JUnitlerin yazılması ve test edilmesinde kullanılan önemli sınıflardır. Önemli sınıflardan bazıları -

  • Assert - Bir dizi iddia yöntemi içerir.

  • TestCase - Fikstürü birden çok test yürütmek için tanımlayan bir test senaryosu içerir.

  • TestResult - Bir test senaryosu yürütmenin sonuçlarını toplamak için yöntemler içerir.

Şimdi JUnit kullanma sürecini adım adım göstermek için temel bir örneğe sahip olalım.

Bir Sınıf Oluşturun

Test edilecek bir java sınıfı oluşturun, örneğin MessageUtil.java içinde C:\>JUNIT_WORKSPACE

/*
* This class prints the given message on console.
*/

public class MessageUtil {

   private String message;

   //Constructor
   //@param message to be printed
	
   public MessageUtil(String message){
      this.message = message;
   }
      
   // prints the message
   public String printMessage(){
      System.out.println(message);
      return message;
   }   
}

Test Vaka Sınıfı Oluşturun

  • TestJunit.java gibi bir java test sınıfı oluşturun.
  • Test sınıfınıza bir test yöntemi testPrintMessage () ekleyin.
  • TestPrintMessage () yöntemine bir @Test Notu ekleyin.
  • Test koşulunu uygulayın ve JUnit'in assertEquals API'sini kullanarak koşulu kontrol edin.

TestJunit.java adlı bir java sınıfı dosya adı oluşturun C:\>JUNIT_WORKSPACE.

import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class TestJunit {
	
   String message = "Hello World";	
   MessageUtil messageUtil = new MessageUtil(message);

   @Test
   public void testPrintMessage() {
      assertEquals(message,messageUtil.printMessage());
   }
}

Test Runner Sınıfı Oluşturun

  • Bir TestRunner java sınıfı oluşturun.
  • Yukarıda oluşturulan test sınıfının test durumunu çalıştırmak için JUnit'in JUnitCore sınıfının runClasses yöntemini kullanın.
  • Sonuç Nesnesinde çalıştırılan test senaryolarının sonucunu alın.
  • Result nesnesinin getFailures () yöntemini kullanarak hataları alın.
  • Result nesnesinin wasSuccessful () yöntemini kullanarak Başarı sonucunu alın.

TestRunner.java adlı bir java sınıf dosyası oluşturun. C:\>JUNIT_WORKSPACE test senaryolarını yürütmek için.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestJunit.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Javac kullanarak MessageUtil, Test case ve Test Runner sınıflarını derleyin.

C:\JUNIT_WORKSPACE>javac MessageUtil.java TestJunit.java TestRunner.java

Şimdi, sağlanan Test Case sınıfında tanımlanan test senaryosunu çalıştıracak olan Test Runner'ı çalıştırın.

C:\JUNIT_WORKSPACE>java TestRunner

Çıkışı doğrulayın.

Hello World
true

Şimdi TestJunit'i güncelleyin C:\>JUNIT_WORKSPACEböylece test başarısız olur. Mesaj dizisini değiştirin.

import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class TestJunit {
	
   String message = "Hello World";	
   MessageUtil messageUtil = new MessageUtil(message);

   @Test
   public void testPrintMessage() {
      message = "New Word";
      assertEquals(message,messageUtil.printMessage());
   }
}

Geri kalan sınıfları olduğu gibi tutalım ve aynı Test Runner'ı çalıştırmayı deneyelim.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {

   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestJunit.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Şimdi, sağlanan Test Case sınıfında tanımlanan test senaryosunu çalıştıracak olan Test Runner'ı çalıştırın.

C:\JUNIT_WORKSPACE>java TestRunner

Çıkışı doğrulayın.

Hello World
testPrintMessage(TestJunit): expected:<[New Wor]d> but was:<[Hello Worl]d>
false

JUnit'teki en önemli paket junit.framework, tüm çekirdek sınıfları içeren. Önemli sınıflardan bazıları aşağıdaki gibidir -

Sr.No. Sınıf adı İşlevsellik
1 İddia Bir dizi iddia yöntemi.
2 Test durumu Bir test senaryosu, fikstürü birden fazla test yapacak şekilde tanımlar.
3 Test sonucu Bir TestResult, bir test olayının yürütülmesinin sonuçlarını toplar.
4 Test odası Bir TestSuite, testlerin bir bileşimidir.

Assert Sınıfı

Aşağıdaki beyanı org.junit.Assert sınıf -

public class Assert extends java.lang.Object

Bu sınıf, test yazmak için yararlı olan bir dizi onaylama yöntemi sağlar. Yalnızca başarısız iddialar kaydedilir. Assert sınıfının önemli yöntemlerinden bazıları aşağıdaki gibidir -

Sr.No. Yöntemler ve Açıklama
1

void assertEquals(boolean expected, boolean actual)

İki temel öğenin / nesnenin eşit olduğunu kontrol eder.

2

void assertFalse(boolean condition)

Bir koşulun yanlış olup olmadığını kontrol eder.

3

void assertNotNull(Object object)

Bir nesnenin boş olmadığını kontrol eder.

4

void assertNull(Object object)

Bir nesnenin boş olup olmadığını kontrol eder.

5

void assertTrue(boolean condition)

Bir koşulun doğru olup olmadığını kontrol eder.

6

void fail()

Mesaj içermeyen bir testi geçemez.

Yukarıdaki yöntemlerden bazılarını bir örnekte kullanalım. TestJunit1.java adlı bir java sınıf dosyası oluşturun.C:\>JUNIT_WORKSPACE.

import org.junit.Test;
import static org.junit.Assert.*;

public class TestJunit1 {
   @Test
   public void testAdd() {
      //test data
      int num = 5;
      String temp = null;
      String str = "Junit is working fine";

      //check for equality
      assertEquals("Junit is working fine", str);
      
      //check for false condition
      assertFalse(num > 6);

      //check for not null value
      assertNotNull(temp);
   }
}

Ardından, adında bir java sınıf dosyası oluşturun TestRunner1.java C: \> JUNIT_WORKSPACE içinde test olay (lar) ını yürütmek için.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner1 {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestJunit1.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Javac kullanarak test durumunu ve Test Runner sınıflarını derleyin.

C:\JUNIT_WORKSPACE>javac TestJunit1.java TestRunner1.java

Şimdi, sağlanan Test Case sınıfında tanımlanan test senaryosunu çalıştıracak olan Test Runner'ı çalıştırın.

C:\JUNIT_WORKSPACE>java TestRunner1

Çıkışı doğrulayın.

true

TestCase Sınıfı

Aşağıdaki beyanı org.junit.TestCase sınıf -

public abstract class TestCase extends Assert implements Test

Bir test senaryosu, fikstürü birden fazla test yapacak şekilde tanımlar. Önemli yöntemlerden bazılarıTestCase sınıf aşağıdaki gibidir -

Sr.No. Yöntemler ve Açıklama
1

int countTestCases()

Çalıştırma tarafından yürütülen test olaylarının sayısını sayar (TestResult sonucu).

2

TestResult createResult()

Varsayılan bir TestResult nesnesi oluşturur.

3

String getName()

Bir TestCase'in adını alır.

4

TestResult run()

Sonuçları varsayılan bir TestResult nesnesiyle toplayarak bu testi çalıştırmak için kullanışlı bir yöntem.

5

void run(TestResult result)

Test durumunu çalıştırır ve sonuçları TestResult'ta toplar.

6

void setName(String name)

Bir TestCase'in adını ayarlar.

7

void setUp()

Fikstürü kurar, örneğin bir ağ bağlantısı açar.

8

void tearDown()

Armatürü yırtıp atın, örneğin bir ağ bağlantısını kapatın.

9

String toString()

Test olayının dize olarak temsilini döndürür.

Yukarıdaki yöntemlerden bazılarını bir örnekte kullanalım. Adlı bir java sınıf dosyası oluşturunTestJunit2.java C: \> JUNIT_WORKSPACE konumunda.

import junit.framework.TestCase;
import org.junit.Before;
import org.junit.Test;

public class TestJunit2 extends TestCase  {
   protected double fValue1;
   protected double fValue2;
   
   @Before 
   public void setUp() {
      fValue1 = 2.0;
      fValue2 = 3.0;
   }
	
   @Test
   public void testAdd() {
      //count the number of test cases
      System.out.println("No of Test Case = "+ this.countTestCases());
		
      //test getName 
      String name = this.getName();
      System.out.println("Test Case Name = "+ name);

      //test setName
      this.setName("testNewAdd");
      String newName = this.getName();
      System.out.println("Updated Test Case Name = "+ newName);
   }
	
   //tearDown used to close the connection or clean up activities
   public void tearDown(  ) {
   }
}

Ardından, adında bir java sınıf dosyası oluşturun TestRunner2.java C: \> JUNIT_WORKSPACE içinde test olay (lar) ını yürütmek için.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner2 {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestJunit2.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Javac kullanarak test durumunu ve Test Runner sınıflarını derleyin.

C:\JUNIT_WORKSPACE>javac TestJunit2.java TestRunner2.java

Şimdi, sağlanan Test Case sınıfında tanımlanan test senaryosunu çalıştıracak olan Test Runner'ı çalıştırın.

C:\JUNIT_WORKSPACE>java TestRunner2

Çıkışı doğrulayın.

No of Test Case = 1
Test Case Name = testAdd
Updated Test Case Name = testNewAdd
true

TestResult Sınıfı

Aşağıdaki beyanı org.junit.TestResult sınıf -

public class TestResult extends Object

Bir TestResult, bir test olayının yürütülmesinin sonuçlarını toplar. Toplama Parametresi modelinin bir örneğidir. Test çerçevesi, hataları ve hataları birbirinden ayırır. Bir arıza tahmin edilir ve iddialarla kontrol edilir. Hatalar, ArrayIndexOutOfBoundsException gibi beklenmeyen sorunlardır. Önemli yöntemlerden bazılarıTestResult sınıf aşağıdaki gibidir -

Sr.No. Yöntemler ve Açıklama
1

void addError(Test test, Throwable t)

Hata listesine bir hata ekler.

2

void addFailure(Test test, AssertionFailedError t)

Arıza listesine bir arıza ekler.

3

void endTest(Test test)

Sonucu bir testin tamamlandığını bildirir.

4

int errorCount()

Tespit edilen hataların sayısını alır.

5

Enumeration<TestFailure> errors()

Hatalar için bir Numaralandırma döndürür.

6

int failureCount()

Tespit edilen başarısızlıkların sayısını alır.

7

void run(TestCase test)

Bir TestCase çalıştırır.

8

int runCount()

Çalıştırma testlerinin sayısını alır.

9

void startTest(Test test)

Sonucu bir testin başlatılacağı konusunda bilgilendirir.

10

void stop()

Test çalıştırmasının durması gerektiğini belirtir.

Adlı bir java sınıf dosyası oluşturun TestJunit3.java C: \> JUNIT_WORKSPACE konumunda.

import org.junit.Test;
import junit.framework.AssertionFailedError;
import junit.framework.TestResult;

public class TestJunit3 extends TestResult {
   // add the error
   public synchronized void addError(Test test, Throwable t) {
      super.addError((junit.framework.Test) test, t);
   }

   // add the failure
   public synchronized void addFailure(Test test, AssertionFailedError t) {
      super.addFailure((junit.framework.Test) test, t);
   }
	
   @Test
   public void testAdd() {
      // add any test
   }
   
   // Marks that the test run should stop.
   public synchronized void stop() {
      //stop the test here
   }
}

Ardından, adında bir java sınıf dosyası oluşturun TestRunner3.java C: \> JUNIT_WORKSPACE içinde test olay (lar) ını yürütmek için.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner3 {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestJunit3.class);

      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Javac kullanarak test durumunu ve Test Runner sınıflarını derleyin.

C:\JUNIT_WORKSPACE>javac TestJunit3.java TestRunner3.java

Şimdi, sağlanan Test Case sınıfında tanımlanan test senaryosunu çalıştıracak olan Test Runner'ı çalıştırın.

C:\JUNIT_WORKSPACE>java TestRunner3

Çıkışı doğrulayın.

true

TestSuite Sınıfı

Aşağıdaki beyanı org.junit.TestSuite sınıf:

public class TestSuite extends Object implements Test

TestSuite, testlerin bir Bileşimidir. Bir dizi test senaryosu çalıştırır. Önemli yöntemlerden bazılarıTestSuite sınıf aşağıdaki gibidir -

Sr.No. Yöntemler ve Açıklama
1

void addTest(Test test)

Pakete bir test ekler.

2

void addTestSuite(Class<? extends TestCase> testClass)

Verilen sınıftaki testleri süite ekler.

3

int countTestCases()

Bu test tarafından çalıştırılacak test senaryolarının sayısını sayar.

4

String getName()

Paketin adını verir.

5

void run(TestResult result)

Testleri çalıştırır ve sonuçlarını bir TestResult'ta toplar.

6

void setName(String name)

Paketin adını ayarlar.

7

Test testAt(int index)

Verilen dizindeki testi döndürür.

8

int testCount()

Bu paketteki testlerin sayısını döndürür.

9

static Test warning(String message)

Başarısız olacak ve bir uyarı mesajı kaydedecek bir test döndürür.

Adlı bir java sınıf dosyası oluşturun JunitTestSuite.java C: \> JUNIT_WORKSPACE içinde Test paketi oluşturmak için.

import junit.framework.*;

public class JunitTestSuite {
   public static void main(String[] a) {
      // add the test's in the suite
      TestSuite suite = new TestSuite(TestJunit1.class, TestJunit2.class, TestJunit3.class );
      TestResult result = new TestResult();
      suite.run(result);
      System.out.println("Number of test cases = " + result.runCount());
   }
}

Javac kullanarak Test paketi sınıflarını derleyin.

C:\JUNIT_WORKSPACE>javac JunitTestSuite.java

Şimdi Test Suite'i çalıştırın.

C:\JUNIT_WORKSPACE>java JunitTestSuite

Çıkışı doğrulayın.

No of Test Case = 1
Test Case Name = testAdd
Updated Test Case Name = testNewAdd
Number of test cases = 3

Burada, POJO sınıfı, İş mantığı sınıfı ve test çalıştırıcısı tarafından çalıştırılacak bir test sınıfı kullanılarak JUnit testinin eksiksiz bir örneğini göreceğiz.

Oluşturmak EmployeeDetails.java POJO sınıfı olan C: \> JUNIT_WORKSPACE içinde.

public class EmployeeDetails {

   private String name;
   private double monthlySalary;
   private int age;
   
   /**
   * @return the name
   */
	
   public String getName() {
      return name;
   }
	
   /**
   * @param name the name to set
   */
	
   public void setName(String name) {
      this.name = name;
   }
	
   /**
   * @return the monthlySalary
   */
	
   public double getMonthlySalary() {
      return monthlySalary;
   }
	
   /**
   * @param monthlySalary the monthlySalary to set
   */
	
   public void setMonthlySalary(double monthlySalary) {
      this.monthlySalary = monthlySalary;
   }
	
   /**
   * @return the age
   */
   public int getAge() {
      return age;
   }
	
   /**
   * @param age the age to set
   */
   public void setAge(int age) {
      this.age = age;
   }
}

EmployeeDetails sınıf kullanılır -

  • çalışanın adının değerini alın / ayarlayın.
  • çalışanın aylık maaşının değerini alın / ayarlayın.
  • çalışanın yaşının değerini öğrenin / ayarlayın.

Adlı bir dosya oluşturun EmpBusinessLogic.java iş mantığını içeren C: \> JUNIT_WORKSPACE içinde.

public class EmpBusinessLogic {
   // Calculate the yearly salary of employee
   public double calculateYearlySalary(EmployeeDetails employeeDetails) {
      double yearlySalary = 0;
      yearlySalary = employeeDetails.getMonthlySalary() * 12;
      return yearlySalary;
   }
	
   // Calculate the appraisal amount of employee
   public double calculateAppraisal(EmployeeDetails employeeDetails) {
      double appraisal = 0;
		
      if(employeeDetails.getMonthlySalary() < 10000){
         appraisal = 500;
      }else{
         appraisal = 1000;
      }
		
      return appraisal;
   }
}

EmpBusinessLogic sınıf hesaplamak için kullanılır -

  • bir çalışanın yıllık maaşı.
  • bir çalışanın ekspertiz tutarı.

Adlı bir dosya oluşturun TestEmployeeDetails.java test edilecek test senaryolarını içeren C: \> JUNIT_WORKSPACE içinde.

import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class TestEmployeeDetails {
   EmpBusinessLogic empBusinessLogic = new EmpBusinessLogic();
   EmployeeDetails employee = new EmployeeDetails();

   //test to check appraisal
   @Test
   public void testCalculateAppriasal() {
      employee.setName("Rajeev");
      employee.setAge(25);
      employee.setMonthlySalary(8000);
		
      double appraisal = empBusinessLogic.calculateAppraisal(employee);
      assertEquals(500, appraisal, 0.0);
   }

   // test to check yearly salary
   @Test
   public void testCalculateYearlySalary() {
      employee.setName("Rajeev");
      employee.setAge(25);
      employee.setMonthlySalary(8000);
		
      double salary = empBusinessLogic.calculateYearlySalary(employee);
      assertEquals(96000, salary, 0.0);
   }
}

TestEmployeeDetails sınıfı, yöntemlerini test etmek için kullanılır EmpBusinessLogicsınıf. O

  • çalışanın yıllık maaşını test eder.
  • çalışanın ekspertiz tutarını test eder.

Ardından, adlı dosyalanmış bir java sınıfı oluşturun TestRunner.java C: \> JUNIT_WORKSPACE içinde test olay (lar) ını yürütmek için.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestEmployeeDetails.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Javac kullanarak test durumunu ve Test Runner sınıflarını derleyin.

C:\JUNIT_WORKSPACE>javac EmployeeDetails.java 
EmpBusinessLogic.java TestEmployeeDetails.java TestRunner.java

Şimdi, sağlanan Test Case sınıfında tanımlanan test senaryosunu çalıştıracak olan Test Runner'ı çalıştırın.

C:\JUNIT_WORKSPACE>java TestRunner

Çıkışı doğrulayın.

true

İddia

Tüm iddialar Assert sınıfındadır.

public class Assert extends java.lang.Object

Bu sınıf, test yazmak için yararlı olan bir dizi onaylama yöntemi sağlar. Yalnızca başarısız iddialar kaydedilir. Assert sınıfının önemli yöntemlerinden bazıları aşağıdaki gibidir -

Sr.No. Yöntemler ve Açıklama
1

void assertEquals(boolean expected, boolean actual)

İki temel öğenin / nesnenin eşit olduğunu kontrol eder.

2

void assertTrue(boolean condition)

Bir koşulun doğru olup olmadığını kontrol eder.

3

void assertFalse(boolean condition)

Bir koşulun yanlış olup olmadığını kontrol eder.

4

void assertNotNull(Object object)

Bir nesnenin boş olmadığını kontrol eder.

5

void assertNull(Object object)

Bir nesnenin boş olup olmadığını kontrol eder.

6

void assertSame(object1, object2)

AssertSame () yöntemi, iki nesne başvurusunun aynı nesneyi işaret edip etmediğini test eder.

7

void assertNotSame(object1, object2)

AssertNotSame () yöntemi, iki nesne başvurusunun aynı nesneyi işaret edip etmediğini test eder.

8

void assertArrayEquals(expectedArray, resultArray);

AssertArrayEquals () yöntemi, iki dizinin birbirine eşit olup olmadığını test eder.

Yukarıdaki yöntemlerden bazılarını bir örnekte kullanalım. Adlı bir java sınıf dosyası oluşturunTestAssertions.java C: \> JUNIT_WORKSPACE konumunda.

import org.junit.Test;
import static org.junit.Assert.*;

public class TestAssertions {

   @Test
   public void testAssertions() {
      //test data
      String str1 = new String ("abc");
      String str2 = new String ("abc");
      String str3 = null;
      String str4 = "abc";
      String str5 = "abc";
		
      int val1 = 5;
      int val2 = 6;

      String[] expectedArray = {"one", "two", "three"};
      String[] resultArray =  {"one", "two", "three"};

      //Check that two objects are equal
      assertEquals(str1, str2);

      //Check that a condition is true
      assertTrue (val1 < val2);

      //Check that a condition is false
      assertFalse(val1 > val2);

      //Check that an object isn't null
      assertNotNull(str1);

      //Check that an object is null
      assertNull(str3);

      //Check if two object references point to the same object
      assertSame(str4,str5);

      //Check if two object references not point to the same object
      assertNotSame(str1,str3);

      //Check whether two arrays are equal to each other.
      assertArrayEquals(expectedArray, resultArray);
   }
}

Ardından, adında bir java sınıf dosyası oluşturun TestRunner.java C: \> JUNIT_WORKSPACE içinde test olay (lar) ını yürütmek için.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner2 {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestAssertions.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Test durumunu ve Test Runner sınıflarını javac kullanarak derleyin.

C:\JUNIT_WORKSPACE>javac TestAssertions.java TestRunner.java

Şimdi, sağlanan Test Case sınıfında tanımlanan test senaryosunu çalıştıracak olan Test Runner'ı çalıştırın.

C:\JUNIT_WORKSPACE>java TestRunner

Çıkışı doğrulayın.

true

Ek açıklama

Ek açıklamalar, kodunuza ekleyebileceğiniz ve bunları yöntemlere veya sınıfta uygulayabileceğiniz meta etiketler gibidir. JUnit'teki bu ek açıklamalar, test yöntemleri hakkında aşağıdaki bilgileri sağlar -

  • test yöntemlerinden önce ve sonra hangi yöntemlerin çalıştırılacağı.
  • tüm yöntemlerden önce ve sonra hangi yöntemlerin çalıştığı ve.
  • yürütme sırasında hangi yöntemlerin veya sınıfların yok sayılacağı.

Aşağıdaki tablo ek açıklamaların bir listesini ve bunların JUnit'teki anlamlarını sağlar -

Sr.No. Ek Açıklama ve Açıklama
1

@Test

Test ek açıklaması JUnit'e eklendiği genel void yönteminin bir test senaryosu olarak çalıştırılabileceğini söyler.

2

@Before

Birkaç testin çalıştırılmadan önce benzer nesnelerin oluşturulmasına ihtiyacı vardır. Bir genel void yöntemine @Before ile açıklama eklemek, bu yöntemin her Test yönteminden önce çalıştırılmasına neden olur.

3

@After

Bir Before yönteminde harici kaynakları ayırırsanız, bunları test çalıştırdıktan sonra serbest bırakmanız gerekir. Genel bir void yöntemine @After ile açıklama eklemek, bu yöntemin Test yönteminden sonra çalıştırılmasına neden olur.

4

@BeforeClass

@BeforeClass ile genel bir statik void yöntemine açıklama eklemek, bu yöntemin sınıftaki herhangi bir test yönteminden önce bir kez çalıştırılmasına neden olur.

5

@AfterClass

Bu, yöntemi tüm testler bittikten sonra gerçekleştirecektir. Bu, temizlik faaliyetlerini gerçekleştirmek için kullanılabilir.

6

@Ignore

Yoksay ek açıklaması, testi yok saymak için kullanılır ve bu test yürütülmez.

Adlı bir java sınıf dosyası oluşturun JunitAnnotation.java ek açıklamayı test etmek için C: \> JUNIT_WORKSPACE içinde.

import org.junit.After;
import org.junit.AfterClass;

import org.junit.Before;
import org.junit.BeforeClass;

import org.junit.Ignore;
import org.junit.Test;

public class JunitAnnotation {
	
   //execute before class
   @BeforeClass
   public static void beforeClass() {
      System.out.println("in before class");
   }

   //execute after class
   @AfterClass
   public static void  afterClass() {
      System.out.println("in after class");
   }

   //execute before test
   @Before
   public void before() {
      System.out.println("in before");
   }
	
   //execute after test
   @After
   public void after() {
      System.out.println("in after");
   }
	
   //test case
   @Test
   public void test() {
      System.out.println("in test");
   }
	
   //test case ignore and will not execute
   @Ignore
   public void ignoreTest() {
      System.out.println("in ignore test");
   }
}

Ardından, adında bir java sınıf dosyası oluşturun TestRunner.java ek açıklamaları yürütmek için C: \> JUNIT_WORKSPACE içinde.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(JunitAnnotation.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Test durumunu ve Test Runner sınıflarını javac kullanarak derleyin.

C:\JUNIT_WORKSPACE>javac JunitAnnotation.java TestRunner.java

Şimdi, sağlanan Test Case sınıfında tanımlanan test senaryosunu çalıştıracak olan Test Runner'ı çalıştırın.

C:\JUNIT_WORKSPACE>java TestRunner

Çıkışı doğrulayın.

in before class
in before
in test
in after
in after class
true

Bu bölüm, çağrılan yöntemlerin sırasını tanımlayan JUnit'teki yöntemlerin yürütme prosedürünü açıklar. Aşağıda, örnekle birlikte JUnit test API yöntemlerinin yürütme prosedürü tartışılmaktadır.

Ek açıklamayı test etmek için C: \> JUNIT_WORKSPACE'de ExecutionProcedureJunit.java adlı bir java sınıfı dosyası oluşturun.

import org.junit.After;
import org.junit.AfterClass;

import org.junit.Before;
import org.junit.BeforeClass;

import org.junit.Ignore;
import org.junit.Test;

public class ExecutionProcedureJunit {
	
   //execute only once, in the starting 
   @BeforeClass
   public static void beforeClass() {
      System.out.println("in before class");
   }

   //execute only once, in the end
   @AfterClass
   public static void  afterClass() {
      System.out.println("in after class");
   }

   //execute for each test, before executing test
   @Before
   public void before() {
      System.out.println("in before");
   }
	
   //execute for each test, after executing test
   @After
   public void after() {
      System.out.println("in after");
   }
	
   //test case 1
   @Test
   public void testCase1() {
      System.out.println("in test case 1");
   }

   //test case 2
   @Test
   public void testCase2() {
      System.out.println("in test case 2");
   }
}

Ardından, adında bir java sınıf dosyası oluşturun TestRunner.java ek açıklamaları yürütmek için C: \> JUNIT_WORKSPACE içinde.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(ExecutionProcedureJunit.class);

      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Test durumunu ve Test Runner sınıflarını javac kullanarak derleyin.

C:\JUNIT_WORKSPACE>javac ExecutionProcedureJunit.java TestRunner.java

Şimdi, sağlanan Test Case sınıfında tanımlanan test senaryosunu çalıştıracak olan Test Runner'ı çalıştırın.

C:\JUNIT_WORKSPACE>java TestRunner

Çıkışı doğrulayın.

in before class
in before
in test case 1
in after
in before
in test case 2
in after
in after class

Yukarıdaki çıktıya bakın. Yürütme prosedürü aşağıdaki gibidir -

  • Her şeyden önce, beforeClass () yöntemi yalnızca bir kez çalıştırılır.
  • AfterClass () yöntemi yalnızca bir kez çalıştırılır.
  • Before () yöntemi her test senaryosu için, ancak test senaryosu yürütülmeden önce yürütülür.
  • After () yöntemi her test senaryosu için, ancak test senaryosunun yürütülmesinden sonra yürütülür.
  • Öncesi () ve sonrası () arasında, her test senaryosu yürütülür.

Test senaryoları kullanılarak yürütülür JUnitCoresınıf. JUnitCore, testleri çalıştırmak için bir cephedir. JUnit 4 testleri, JUnit 3.8.x testleri ve karışımların çalıştırılmasını destekler. Testleri komut satırından çalıştırmak için java org.junit.runner.JUnitCore <TestClass> komutunu çalıştırın. Tek seferlik test çalıştırmaları için, statik yöntemi runClasses (Class []) kullanın.

Aşağıdaki beyanı org.junit.runner.JUnitCore sınıf:

public class JUnitCore extends java.lang.Object

Burada testlerin JUnitCore yardımıyla nasıl yürütüleceğini göreceğiz.

Bir Sınıf Oluşturun

Test edilecek bir java sınıfı oluşturun, diyelim ki, MessageUtil.java, C: \> JUNIT_WORKSPACE konumunda.

/*
* This class prints the given message on console.
*/

public class MessageUtil {

   private String message;

   //Constructor
   //@param message to be printed
   public MessageUtil(String message){
      this.message = message;
   }
      
   // prints the message
   public String printMessage(){
      System.out.println(message);
      return message;
   }   
	
}

Test Vaka Sınıfı Oluşturun

  • TestJunit.java gibi bir java test sınıfı oluşturun.

  • Test sınıfınıza bir test yöntemi testPrintMessage () ekleyin.

  • TestPrintMessage () yöntemine bir @Test Not ekleyin.

  • Test koşulunu uygulayın ve JUnit'in assertEquals API'sini kullanarak koşulu kontrol edin.

Adlı bir java sınıf dosyası oluşturun TestJunit.java C: \> JUNIT_WORKSPACE konumunda.

import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class TestJunit {
	
   String message = "Hello World";	
   MessageUtil messageUtil = new MessageUtil(message);

   @Test
   public void testPrintMessage() {
      assertEquals(message,messageUtil.printMessage());
   }
}

Test Runner Sınıfı Oluşturun

Şimdi adında bir java sınıf dosyası oluşturun TestRunner.javaC: \> JUNIT_WORKSPACE içinde test olay (lar) ını yürütmek için. JUnitCore sınıfını içe aktarır ve test sınıfı adını parametresi olarak alan runClasses () yöntemini kullanır.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestJunit.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Test durumunu ve Test Runner sınıflarını javac kullanarak derleyin.

C:\JUNIT_WORKSPACE>javac MessageUtil.java TestJunit.java TestRunner.java

Şimdi, sağlanan Test Case sınıfında tanımlanan test senaryosunu çalıştıracak olan Test Runner'ı çalıştırın.

C:\JUNIT_WORKSPACE>java TestRunner

Çıkışı doğrulayın.

Hello World
true

Test suitebirkaç birim test durumunu bir araya getirmek ve birlikte çalıştırmak için kullanılır. JUnit'te her ikisi de@RunWith ve @SuiteEk açıklamalar, süit testlerini çalıştırmak için kullanılır. Bu bölüm, iki test sınıfına sahip bir örnek alır:TestJunit1 & TestJunit2, Test Suite kullanılarak birlikte çalışan.

Bir Sınıf Oluşturun

Test edilecek bir java sınıfı oluşturun, diyelim ki, MessageUtil.java C: \> JUNIT_WORKSPACE konumunda.

/*
* This class prints the given message on console.
*/

public class MessageUtil {

   private String message;

   //Constructor
   //@param message to be printed
   public MessageUtil(String message){
      this.message = message; 
   }

   // prints the message
   public String printMessage(){
      System.out.println(message);
      return message;
   }   

   // add "Hi!" to the message
   public String salutationMessage(){
      message = "Hi!" + message;
      System.out.println(message);
      return message;
   }   
}

Test Vaka Sınıfları Oluşturun

Adlı bir java sınıf dosyası oluşturun TestJunit1.java C: \> JUNIT_WORKSPACE konumunda.

import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

public class TestJunit1 {

   String message = "Robert";	
   MessageUtil messageUtil = new MessageUtil(message);
   
   @Test
   public void testPrintMessage() {	
      System.out.println("Inside testPrintMessage()");    
      assertEquals(message, messageUtil.printMessage());     
   }
}

Adlı bir java sınıf dosyası oluşturun TestJunit2.java C: \> JUNIT_WORKSPACE konumunda.

import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

public class TestJunit2 {

   String message = "Robert";	
   MessageUtil messageUtil = new MessageUtil(message);
 
   @Test
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Robert";
      assertEquals(message,messageUtil.salutationMessage());
   }
}

Test Suite Sınıfı Oluşturun

  • Bir java sınıfı oluşturun.
  • Sınıfa @RunWith (Suite.class) Ek Açıklamasını ekleyin.
  • @ Suite.SuiteClasses annotation kullanarak JUnit test sınıflarına referans ekleyin.

Adlı bir java sınıf dosyası oluşturun TestSuite.java C: \> JUNIT_WORKSPACE içinde test olay (lar) ını yürütmek için.

import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Suite.class)

@Suite.SuiteClasses({
   TestJunit1.class,
   TestJunit2.class
})

public class JunitTestSuite {   
}

Test Runner Sınıfı Oluşturun

Adlı bir java sınıf dosyası oluşturun TestRunner.java C: \> JUNIT_WORKSPACE içinde test olay (lar) ını yürütmek için.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(JunitTestSuite.class);

      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Tüm java sınıflarını javac kullanarak derleyin.

C:\JUNIT_WORKSPACE>javac MessageUtil.java TestJunit1.java 
TestJunit2.java JunitTestSuite.java TestRunner.java

Şimdi, sağlanan Test Case sınıfında tanımlanan test senaryosunu çalıştıracak olan Test Runner'ı çalıştırın.

C:\JUNIT_WORKSPACE>java TestRunner

Çıkışı doğrulayın.

Inside testPrintMessage()
Robert
Inside testSalutationMessage()
Hi Robert
true

Bazen öyle olur ki, bir test senaryosu çalıştırılırken kodumuz tamamen hazır değildir. Sonuç olarak, test durumu başarısız olur. @Ignore ek açıklama bu senaryoda yardımcı olur.

  • @Ignore ile açıklanmış bir test yöntemi yürütülmeyecektir.

  • Bir test sınıfına @Ignore not verilmişse, test yöntemlerinden hiçbiri çalıştırılmaz.

Şimdi @Ignore'u iş başında görelim.

Bir Sınıf Oluşturun

Test edilecek bir java sınıfı oluşturun, diyelim ki, MessageUtil.java C: \> JUNIT_WORKSPACE konumunda.

/*
* This class prints the given message on console.
*/

public class MessageUtil {

   private String message;

   //Constructor
   //@param message to be printed
   public MessageUtil(String message){
      this.message = message; 
   }

   // prints the message
   public String printMessage(){
      System.out.println(message);
      return message;
   }   

   // add "Hi!" to the message
   public String salutationMessage(){
      message = "Hi!" + message;
      System.out.println(message);
      return message;
   }   
	
}

Test Vaka Sınıfı Oluşturun

  • TestJunit.java gibi bir java test sınıfı oluşturun.

  • Test sınıfınıza bir test yöntemi testPrintMessage () veya testSalutationMessage () ekleyin.

  • TestPrintMessage () yöntemine bir @Ignore Notu ekleyin.

Adlı bir java sınıf dosyası oluşturun TestJunit.java C: \ JUNIT_WORKSPACE konumunda.

import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

public class TestJunit {

   String message = "Robert";	
   MessageUtil messageUtil = new MessageUtil(message);
   
   @Ignore
   @Test
   public void testPrintMessage() {
      System.out.println("Inside testPrintMessage()");
      message = "Robert";
      assertEquals(message,messageUtil.printMessage());
   }

   @Test
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Robert";
      assertEquals(message,messageUtil.salutationMessage());
   }
	
}

Test Runner Sınıfı Oluşturun

Adlı bir java sınıf dosyası oluşturun TestRunner.java C: \> JUNIT_WORKSPACE içinde test olay (lar) ını yürütmek için.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestJunit.class);

      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Javac kullanarak MessageUtil, Test case ve Test Runner sınıflarını derleyin.

C:\JUNIT_WORKSPACE>javac MessageUtil.java TestJunit.java TestRunner.java

Şimdi, sağlanan Test Senaryosu sınıfında tanımlanan testPrintMessage () test durumunu çalıştırmayacak olan Test Çalıştırıcısı'nı çalıştırın.

C:\JUNIT_WORKSPACE>java TestRunner

Çıkışı doğrulayın. testPrintMessage () test durumu test edilmemiştir.

Inside testSalutationMessage()
Hi!Robert
true

Şimdi, tüm test durumlarını yoksaymak için C: \> JUNIT_WORKSPACE'deki TestJunit'i güncelleyin. Sınıf düzeyinde @Ignore ekleyin.

import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

@Ignore
public class TestJunit {

   String message = "Robert";	
   MessageUtil messageUtil = new MessageUtil(message);
     
   @Test
   public void testPrintMessage() {
      System.out.println("Inside testPrintMessage()");
      message = "Robert";
      assertEquals(message,messageUtil.printMessage());
   }

   @Test
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Robert";
      assertEquals(message,messageUtil.salutationMessage());
   }
	
}

Javac kullanarak test durumunu derleyin.

C:\JUNIT_WORKSPACE>javac TestJunit.java

Test Runner'ınızı aşağıdaki gibi değiştirmeyin -

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestJunit.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Şimdi, sağlanan Test Senaryosu sınıfında tanımlanan herhangi bir test durumunu çalıştırmayacak olan Test Çalıştırıcısı'nı çalıştırın.

C:\JUNIT_WORKSPACE>java TestRunner

Çıkışı doğrulayın. Test senaryosu test edilmemiştir.

true

JUnit, kullanışlı bir Zaman Aşımı seçeneği sunar. Bir test durumu, belirtilen milisaniye sayısından daha uzun sürerse, JUnit bunu otomatik olarak başarısız olarak işaretleyecektir. timeoutparametresi @Test açıklama ile birlikte kullanılır. @Test'i (zaman aşımı) çalışırken görelim.

Bir Sınıf Oluşturun

Test edilecek bir java sınıfı oluşturun, diyelim ki, MessageUtil.java C: \> JUNIT_WORKSPACE konumunda.

PrintMessage () yönteminin içine sonsuz bir while döngüsü ekleyin.

/*
* This class prints the given message on console.
*/

public class MessageUtil {

   private String message;

   //Constructor
   //@param message to be printed
   public MessageUtil(String message){
      this.message = message; 
   }

   // prints the message
   public void printMessage(){
      System.out.println(message);
      while(true);
   }   

   // add "Hi!" to the message
   public String salutationMessage(){
      message = "Hi!" + message;
      System.out.println(message);
      return message;
   }   
}

Test Vaka Sınıfı Oluşturun

Bir java test sınıfı oluşturun, diyelim ki TestJunit.java. TestPrintMessage () test senaryosuna 1000 zaman aşımı ekleyin.

Adlı bir java sınıf dosyası oluşturun TestJunit.java C: \> JUNIT_WORKSPACE konumunda.

import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

public class TestJunit {

   String message = "Robert";	
   MessageUtil messageUtil = new MessageUtil(message);
   
   @Test(timeout = 1000)
   public void testPrintMessage() {	
      System.out.println("Inside testPrintMessage()");     
      messageUtil.printMessage();     
   }

   @Test
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Robert";
      assertEquals(message,messageUtil.salutationMessage());
   }
}

Test Runner Sınıfı Oluşturun

Adlı bir java sınıf dosyası oluşturun TestRunner.java C: \> JUNIT_WORKSPACE içinde test olay (lar) ını yürütmek için.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestJunit.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Javac kullanarak MessageUtil, Test case ve Test Runner sınıflarını derleyin.

C:\JUNIT_WORKSPACE>javac MessageUtil.java TestJunit.java TestRunner.java

Şimdi, sağlanan Test Senaryosu sınıfında tanımlanan test senaryolarını çalıştıracak Test Çalıştırıcısını çalıştırın.

C:\JUNIT_WORKSPACE>java TestRunner

Çıkışı doğrulayın. testPrintMessage () test durumu, birim testinin başarısız olduğunu işaretleyecektir.

Inside testPrintMessage()
Robert
Inside testSalutationMessage()
Hi!Robert
testPrintMessage(TestJunit): test timed out after 1000 milliseconds
false

JUnit, kodun istisna işlemesini izleme seçeneği sunar. Kodun istenen bir istisnayı atıp atmadığını test edebilirsiniz. expectedparametresi @Test açıklama ile birlikte kullanılır. @Test (beklenen) eylemini görelim.

Bir Sınıf Oluşturun

Test edilecek bir java sınıfı oluşturun, diyelim ki, MessageUtil.java C: \> JUNIT_WORKSPACE konumunda.

PrintMessage () yönteminin içine bir hata koşulu ekleyin.

/*
* This class prints the given message on console.
*/

public class MessageUtil {

   private String message;

   //Constructor
   //@param message to be printed
   public MessageUtil(String message){
      this.message = message; 
   }

   // prints the message
   public void printMessage(){
      System.out.println(message);
      int a = 0;
      int b = 1/a;
   }   

   // add "Hi!" to the message
   public String salutationMessage(){
      message = "Hi!" + message;
      System.out.println(message);
      return message;
   }   
}

Test Vaka Sınıfı Oluşturun

Adlı bir java test sınıfı oluşturun TestJunit.java. TestPrintMessage () test durumuna beklenen bir ArithmeticException istisnası ekleyin.

Adlı bir java sınıf dosyası oluşturun TestJunit.java C: \> JUNIT_WORKSPACE konumunda.

import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

public class TestJunit {

   String message = "Robert";	
   MessageUtil messageUtil = new MessageUtil(message);
   
   @Test(expected = ArithmeticException.class)
   public void testPrintMessage() {	
      System.out.println("Inside testPrintMessage()");     
      messageUtil.printMessage();     
   }

   @Test
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Robert";
      assertEquals(message,messageUtil.salutationMessage());
   }
}

Test Runner Sınıfı Oluşturun

Adlı bir java sınıf dosyası oluşturun TestRunner.java C: \> JUNIT_WORKSPACE içinde test olay (lar) ını yürütmek için.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestJunit.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Javac kullanarak MessageUtil, Test case ve Test Runner sınıflarını derleyin.

C:\JUNIT_WORKSPACE>javac MessageUtil.java TestJunit.java TestRunner.java

Şimdi, sağlanan Test Senaryosu sınıfında tanımlanan test senaryolarını çalıştıracak Test Çalıştırıcısını çalıştırın.

C:\JUNIT_WORKSPACE>java TestRunner

Çıkışı doğrulayın. testPrintMessage () test durumu geçilecek.

Inside testPrintMessage()
Robert
Inside testSalutationMessage()
Hi!Robert
true

JUnit 4 adlı yeni bir özellik tanıttı parameterized tests. Parametreli testler, bir geliştiricinin aynı testi farklı değerler kullanarak defalarca çalıştırmasına izin verir. Parametreli bir test oluşturmak için izlemeniz gereken beş adım vardır.

  • Test sınıfına @RunWith (Parameterized.class) ile açıklama ekleyin.

  • @Parameters ile açıklanmış, test veri kümesi olarak Nesnelerin Koleksiyonunu (Dizi olarak) döndüren genel bir statik yöntem oluşturun.

  • Test verilerinin bir "satırına" eşdeğer olanı alan genel bir kurucu oluşturun.

  • Test verilerinin her "sütunu" için bir örnek değişkeni oluşturun.

  • Test verilerinin kaynağı olarak örnek değişkenleri kullanarak test senaryolarınızı oluşturun.

Test senaryosu, her veri satırı için bir kez çağrılacaktır. Parametreli testleri iş başında görelim.

Bir Sınıf Oluşturun

Test edilecek bir java sınıfı oluşturun, diyelim ki, PrimeNumberChecker.java C: \> JUNIT_WORKSPACE konumunda.

public class PrimeNumberChecker {
   public Boolean validate(final Integer primeNumber) {
      for (int i = 2; i < (primeNumber / 2); i++) {
         if (primeNumber % i == 0) {
            return false;
         }
      }
      return true;
   }
}

Parametreli Test Durumu Sınıfı Oluşturun

Bir java test sınıfı oluşturun, diyelim ki PrimeNumberCheckerTest.java. Adlı bir java sınıf dosyası oluşturunPrimeNumberCheckerTest.java C: \> JUNIT_WORKSPACE konumunda.

import java.util.Arrays;
import java.util.Collection;
 
import org.junit.Test;
import org.junit.Before;

import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import org.junit.runner.RunWith;
import static org.junit.Assert.assertEquals;

@RunWith(Parameterized.class)
public class PrimeNumberCheckerTest {
   private Integer inputNumber;
   private Boolean expectedResult;
   private PrimeNumberChecker primeNumberChecker;

   @Before
   public void initialize() {
      primeNumberChecker = new PrimeNumberChecker();
   }

   // Each parameter should be placed as an argument here
   // Every time runner triggers, it will pass the arguments
   // from parameters we defined in primeNumbers() method
	
   public PrimeNumberCheckerTest(Integer inputNumber, Boolean expectedResult) {
      this.inputNumber = inputNumber;
      this.expectedResult = expectedResult;
   }

   @Parameterized.Parameters
   public static Collection primeNumbers() {
      return Arrays.asList(new Object[][] {
         { 2, true },
         { 6, false },
         { 19, true },
         { 22, false },
         { 23, true }
      });
   }

   // This test will run 4 times since we have 5 parameters defined
   @Test
   public void testPrimeNumberChecker() {
      System.out.println("Parameterized Number is : " + inputNumber);
      assertEquals(expectedResult, 
      primeNumberChecker.validate(inputNumber));
   }
}

Test Runner Sınıfı Oluşturun

Adlı bir java sınıf dosyası oluşturun TestRunner.java C: \> JUNIT_WORKSPACE içinde test olay (lar) ını yürütmek için.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(PrimeNumberCheckerTest.class);

      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Javac kullanarak PrimeNumberChecker, PrimeNumberCheckerTest ve Test Runner sınıflarını derleyin.

C:\JUNIT_WORKSPACE>javac PrimeNumberChecker.java PrimeNumberCheckerTest.java
TestRunner.java

Şimdi, sağlanan Test Senaryosu sınıfında tanımlanan test senaryolarını çalıştıracak Test Çalıştırıcısını çalıştırın.

C:\JUNIT_WORKSPACE>java TestRunner

Çıkışı doğrulayın.

Parameterized Number is : 2
Parameterized Number is : 6
Parameterized Number is : 19
Parameterized Number is : 22
Parameterized Number is : 23
true

JUnit'i ANT kullanarak nasıl çalıştıracağımızı göstermek için bir örneğimiz olacak. Aşağıda verilen adımları izleyin.

Adım 1: Apache Ant'ı indirin

Üzerinde çalıştığınız işletim sistemine bağlı olarak Apache Ant'ı indirin .

işletim sistemi Arşiv Adı
pencereler apache-ant-1.8.4-bin.zip
Linux apache-ant-1.8.4-bin.tar.gz
Mac apache-ant-1.8.4-bin.tar.gz

Adım 2: Karınca Ortamını Ayarlayın

Yı kur ANT_HOMEANT kitaplıklarının makinenizde depolandığı temel dizin konumuna işaret etmek için ortam değişkeni. Ant kitaplıklarının apache-ant-1.8.4 klasöründe depolandığını varsayalım.

Sr.No. İşletim Sistemi ve Açıklama
1

Windows

ANT_HOME ortam değişkenini C: \ Program Files \ Apache Software Foundation \ apache-ant-1.8.4 olarak ayarlayın.

2

Linux

dışa aktar ANT_HOME = /usr/local/apache-ant-1.8.4

3

Mac

dışa aktar ANT_HOME = /Library/apache-ant-1.8.4

Sistem Yoluna Ant derleyici konumunu aşağıdaki gibi ekleyin -

işletim sistemi Çıktı
pencereler Dizeyi ekleyin %ANT_HOME\bin sistem değişkeninin sonunda, Path.
Linux dışa aktarma PATH = $PATH:$ANT_HOME / bin /
Mac gerekli değil

3. Adım: JUnit Arşivini İndirin

İşletim sisteminize uygun bir JUnit Arşivi indirin.

işletim sistemi Arşiv Adı
pencereler junit4.10.jar
Linux junit4.10.jar
Mac junit4.10.jar

Adım 4: Proje Yapısı Oluşturun

  • Bir klasör oluşturun TestJunitWithAnt C: \> JUNIT_WORKSPACE konumunda.

  • Bir klasör oluşturun src C: \> JUNIT_WORKSPACE> TestJunitWithAnt.

  • Bir klasör oluşturun test C: \> JUNIT_WORKSPACE> TestJunitWithAnt.

  • Bir klasör oluşturun lib C: \> JUNIT_WORKSPACE> TestJunitWithAnt.

  • Oluşturmak MessageUtil C: \> JUNIT_WORKSPACE> TestJunitWithAnt> src klasöründeki sınıf.

/*
* This class prints the given message on console.
*/

public class MessageUtil {

   private String message;

   //Constructor
   //@param message to be printed
   public MessageUtil(String message){
      this.message = message; 
   }

   // prints the message
   public String printMessage(){
      System.out.println(message);
      return message;
   }   

   // add "Hi!" to the message
   public String salutationMessage(){
      message = "Hi!" + message;
      System.out.println(message);
      return message;
   }   
}

Oluşturmak TestMessageUtil C: \> JUNIT_WORKSPACE> TestJunitWithAnt> src klasöründeki sınıf.

import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

public class TestMessageUtil {

   String message = "Robert";	
   MessageUtil messageUtil = new MessageUtil(message);
   
   @Test
   public void testPrintMessage() {	
      System.out.println("Inside testPrintMessage()");     
      assertEquals(message,messageUtil.printMessage());
   }

   @Test
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Robert";
      assertEquals(message,messageUtil.salutationMessage());
   }
}

Junit-4.10.jar dosyasını C: \> JUNIT_WORKSPACE> TestJunitWithAnt> lib klasörüne kopyalayın.

ANT Build.xml oluştur

Kullanacağız <junit> JUnit test durumlarımızı yürütmek için Ant'ta görev.

<project name = "JunitTest" default = "test" basedir = ".">
   <property name = "testdir" location = "test" />
   <property name = "srcdir" location = "src" />
   <property name = "full-compile" value = "true" />
	
   <path id = "classpath.base"/>
	
   <path id = "classpath.test">
      <pathelement location = "lib/junit-4.10.jar" />
      <pathelement location = "${testdir}" /> <pathelement location = "${srcdir}" />
      <path refid = "classpath.base" />
   </path>
	
   <target name = "clean" >
      <delete verbose = "${full-compile}"> <fileset dir = "${testdir}" includes = "**/*.class" />
      </delete>
   </target>
	
   <target name = "compile" depends = "clean">
      <javac srcdir = "${srcdir}" destdir = "${testdir}" 
         verbose = "${full-compile}">
         <classpath refid = "classpath.test"/>
      </javac>
   </target>
	
   <target name = "test" depends = "compile">
      <junit>
         <classpath refid = "classpath.test" />
         <formatter type = "brief" usefile = "false" />
         <test name = "TestMessageUtil" />
      </junit>
   </target>
	
</project>

Aşağıdaki Ant komutunu çalıştırın.

C:\JUNIT_WORKSPACE\TestJunitWithAnt>ant

Çıkışı doğrulayın.

Buildfile: C:\JUNIT_WORKSPACE\TestJunitWithAnt\build.xml

clean:  

compile:  
   [javac] Compiling 2 source files to C:\JUNIT_WORKSPACE\TestJunitWithAnt\test
   [javac] [parsing started C:\JUNIT_WORKSPACE\TestJunitWithAnt\src\
      MessageUtil.java]
   [javac] [parsing completed 18ms]
   [javac] [parsing started C:\JUNIT_WORKSPACE\TestJunitWithAnt\src\
      TestMessageUtil.java]
   [javac] [parsing completed 2ms]
   [javac] [search path for source files: C:\JUNIT_WORKSPACE\
      TestJunitWithAnt\src]    
   [javac] [loading java\lang\Object.class(java\lang:Object.class)]
   [javac] [loading java\lang\String.class(java\lang:String.class)]
   [javac] [loading org\junit\Test.class(org\junit:Test.class)]
   [javac] [loading org\junit\Ignore.class(org\junit:Ignore.class)]
   [javac] [loading org\junit\Assert.class(org\junit:Assert.class)]
   [javac] [loading java\lang\annotation\Retention.class
      (java\lang\annotation:Retention.class)]
   [javac] [loading java\lang\annotation\RetentionPolicy.class
      (java\lang\annotation:RetentionPolicy.class)]
   [javac] [loading java\lang\annotation\Target.class
      (java\lang\annotation:Target.class)]
   [javac] [loading java\lang\annotation\ElementType.class
      (java\lang\annotation:ElementType.class)]
   [javac] [loading java\lang\annotation\Annotation.class
      (java\lang\annotation:Annotation.class)]
   [javac] [checking MessageUtil]
   [javac] [loading java\lang\System.class(java\lang:System.class)]
   [javac] [loading java\io\PrintStream.class(java\io:PrintStream.class)]
   [javac] [loading java\io\FilterOutputStream.class
      (java\io:FilterOutputStream.class)]
   [javac] [loading java\io\OutputStream.class(java\io:OutputStream.class)]
   [javac] [loading java\lang\StringBuilder.class
      (java\lang:StringBuilder.class)]
   [javac] [loading java\lang\AbstractStringBuilder.class
      (java\lang:AbstractStringBuilder.class)]
   [javac] [loading java\lang\CharSequence.class(java\lang:CharSequence.class)]
   [javac] [loading java\io\Serializable.class(java\io:Serializable.class)]
   [javac] [loading java\lang\Comparable.class(java\lang:Comparable.class)]
   [javac] [loading java\lang\StringBuffer.class(java\lang:StringBuffer.class)]
   [javac] [wrote C:\JUNIT_WORKSPACE\TestJunitWithAnt\test\MessageUtil.class]
   [javac] [checking TestMessageUtil]
   [javac] [wrote C:\JUNIT_WORKSPACE\TestJunitWithAnt\test\TestMessageUtil.class]
   [javac] [total 281ms]

test:
    [junit] Testsuite: TestMessageUtil
    [junit] Tests run: 2, Failures: 0, Errors: 0, Time elapsed: 0.008 sec
    [junit]
    [junit] ------------- Standard Output ---------------
    [junit] Inside testPrintMessage()
    [junit] Robert
    [junit] Inside testSalutationMessage()
    [junit] Hi!Robert
    [junit] ------------- ---------------- ---------------

BUILD SUCCESSFUL
Total time: 0 seconds

Tutulma ile JUnit'i kurmak için aşağıda verilen adımları izleyin.

Adım 1: JUnit Arşivini İndirin

Sisteminizdeki işletim sistemine göre bir JUnit kavanozu indirin.

işletim sistemi Arşiv Adı
pencereler junit4.10.jar
Linux junit4.10.jar
Mac junit4.10.jar

Yukarıdaki JAR dosyasını C: \> JUnit klasörüne kopyaladığınızı varsayın.

Adım 2: Eclipse Ortamını Ayarlayın

Tutulmayı açın → projeye sağ tıklayın ve özellik> Yol Oluştur> Oluşturma Yolunu Yapılandır'a tıklayın ve Dış Jar Ekle düğmesini kullanarak kütüphanelere junit-4.10.jar ekleyin.

Eclipse'inizin dahili JUnit eklentisine sahip olduğunu varsayıyoruz. C: \> eclipse \ plugins dizininde yoksa, şu adresten indirebilirsiniz:JUnit Plugin. Eclipse'in eklenti klasöründe indirilen zip dosyasını açın. Sonunda Eclipse'i yeniden başlatın.

Eclipse'iniz artık JUnit test senaryolarının geliştirilmesine hazır.

Adım 3: Eclipse'de JUnit kurulumunu doğrulayın

Proje oluştur TestJunitEclipse'de herhangi bir yerde. Ardından bir sınıf oluşturunMessageUtil projede test etmek için.

/*
* This class prints the given message on console.
*/

public class MessageUtil {

   private String message;

   //Constructor
   //@param message to be printed
   public MessageUtil(String message){
      this.message = message;
   }
      
   // prints the message
   public String printMessage(){
      System.out.println(message);
      return message;
   }   
}

Bir test sınıfı oluşturun TestJunit Projede.

import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class TestJunit {
	
   String message = "Hello World";	
   MessageUtil messageUtil = new MessageUtil(message);

   @Test
   public void testPrintMessage() {	  
      assertEquals(message,messageUtil.printMessage());
   }
}

Proje yapısı aşağıdaki olmalıdır -

Son olarak, programa sağ tıklayın ve programın çıktısını doğrulamak için JUnit olarak çalıştırın.

Sonucu doğrulayın.

JUnit uzantıları aşağıdadır -

  • Cactus
  • JWebUnit
  • XMLUnit
  • MockObject

Kaktüs

Cactus, sunucu tarafı java kodunu (Servletler, EJB'ler, Etiket Kitaplıkları, Filtreler) birim testi için basit bir test çerçevesidir. Cactus'un amacı, sunucu tarafı kod için test yazma maliyetini düşürmektir. JUnit kullanır ve onu genişletir. Cactus, testleri bir konteynerin içinde yürüten bir konteyner içi strateji uygular.

Kaktüs ekosistemi birkaç bileşenden oluşur -

  • Cactus FrameworkCactus'ün kalbidir. API'nin Cactus testleri yazmasını sağlayan motordur.

  • Cactus Integration Modules Cactus Framework'ü (Ant betikleri, Eclipse eklentisi ve Maven eklentisi) kullanmanın kolay yollarını sağlayan ön uçlar ve çerçevelerdir.

Aşağıdaki kod, Cactus'ün nasıl kullanılabileceğini gösterir.

import org.apache.cactus.*;
import junit.framework.*;

public class TestSampleServlet extends ServletTestCase {
   @Test
   public void testServlet() {
      // Initialize class to test
      SampleServlet servlet = new SampleServlet();

      // Set a variable in session as the doSomething()
      // method that we are testing 
      session.setAttribute("name", "value");

      // Call the method to test, passing an 
      // HttpServletRequest object (for example)
      String result = servlet.doSomething(request);

      // Perform verification that test was successful
      assertEquals("something", result);
      assertEquals("otherValue", session.getAttribute("otherName"));
   }
}

JWebUnit

JWebUnit, web uygulamaları için Java tabanlı bir test çerçevesidir. Web uygulamalarınızın doğruluğunu test etmek için HtmlUnit ve Selenium gibi mevcut test çerçevelerini birleşik, basit bir test arayüzüyle sarar.

JWebUnit, bir web uygulamasında gezinmek için uygulamanın doğruluğunu doğrulamak için bir dizi onayla birlikte yüksek düzeyde bir Java API'si sağlar. Buna bağlantılar aracılığıyla gezinme, form girişi ve gönderme, tablo içeriklerinin doğrulanması ve diğer tipik iş web uygulaması özellikleri dahildir.

Basit gezinme yöntemleri ve kullanıma hazır iddialar, yalnızca JUnit veya HtmlUnit kullanmaktan daha hızlı test oluşturmaya izin verir. HtmlUnit'ten Selenium gibi diğer eklentilere (yakında kullanıma sunulacak) geçmek isterseniz, testlerinizi yeniden yazmanıza gerek yoktur.

İşte örnek bir kod.

import junit.framework.TestCase;
import net.sourceforge.jwebunit.WebTester;

public class ExampleWebTestCase extends TestCase {
   private WebTester tester;
   
   public ExampleWebTestCase(String name) {
      super(name);
      tester = new WebTester();
   }
	
   //set base url
   public void setUp() throws Exception {
      getTestContext().setBaseUrl("http://myserver:8080/myapp");
   }
	
   // test base info
   @Test
   public void testInfoPage() {
      beginAt("/info.html");
   }
}

XMLUnit

XMLUnit, tek bir JUnit uzantı sınıfı, XMLTestCase ve aşağıdakiler hakkında iddiaların yapılmasına izin veren bir dizi destekleyici sınıf sağlar:

  • İki XML parçası arasındaki farklar (Diff ve DetailedDiff sınıfları aracılığıyla).

  • Bir XML parçasının geçerliliği (Validator sınıfı aracılığıyla).

  • XSLT kullanarak (Transform sınıfı aracılığıyla) bir XML parçasını dönüştürmenin sonucu.

  • Bir XML parçası üzerinde bir XPath ifadesinin değerlendirilmesi (XpathEngine arayüzünü uygulayan sınıflar aracılığıyla).

  • DOM Traversal (NodeTest sınıfı aracılığıyla) tarafından sunulan bir XML parçasındaki bağımsız düğümler.

Karşılaştırmak istediğimiz ve eşit olduklarını iddia ettiğimiz iki XML parçamız olduğunu varsayalım. Bunun gibi basit bir test sınıfı yazabiliriz -

import org.custommonkey.xmlunit.XMLTestCase;

public class MyXMLTestCase extends XMLTestCase {

   // this test method compare two pieces of the XML
   @Test
   public void testForXMLEquality() throws Exception {
      String myControlXML = "<msg><uuid>0x00435A8C</uuid></msg>";
      String myTestXML = "<msg><localId>2376</localId></msg>";
      assertXMLEqual("Comparing test xml to control xml", myControlXML, myTestXML);
   }
}

MockObject

Bir birim testinde, sahte nesneler karmaşık, gerçek (sahte olmayan) nesnelerin davranışını simüle edebilir ve bu nedenle gerçek bir nesne pratik olmadığında veya bir birim testine dahil edilmesi imkansız olduğunda yararlıdır.

Sahte nesnelerle test etmek için ortak kodlama stili şudur:

  • Sahte nesnelerin örneklerini oluşturun.
  • Sahte nesnelerde durum ve beklentileri ayarlayın.
  • Parametre olarak sahte nesnelerle etki alanı kodunu çağırın.
  • Sahte nesnelerde tutarlılığı doğrulayın.

Aşağıda Jmock kullanan bir MockObject örneği verilmiştir.

import org.jmock.Mockery;
import org.jmock.Expectations;

class PubTest extends TestCase {
   Mockery context = new Mockery();
   public void testSubReceivesMessage() {
      // set up
      final Sub sub = context.mock(Sub.class);

      Pub pub = new Pub();
      pub.add(sub);
    
      final String message = "message";
      
      // expectations
      context.checking(new Expectations() {
         oneOf (sub).receive(message);
      });

      // execute
      pub.publish(message);
      
      // verify
      context.assertIsSatisfied();
   }
}