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