JUnit - Uzantılar

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 komut dosyaları, 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. Bu, 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ı özelliklerini içerir.

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 istiyorsanız, 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 destek 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).

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

  • 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();
   }
}