Hakan Uygun (hakan.uygun@ozguryazilim.com.tr)
Arquillian Java sunucu uygulamaları bütünleştirme ve fonksiyon testleri için yepyeni bir yol sunuyor. Artık mock nesnelere, sunucu hayat döngüsü yönetim derdine son, doğrudan doğruya gerçek kod üzerinden test yazıyoruz.
Klasik test sistemlerinde test kodlarımızı, mock nesnelerle yazmak ve sunucu dışında çalıştırmak gerekiyordu. Arquillian ile kodlarımız doğrudan çalışması gereken sunucu içerisinde gerçek kodlarımızla çalışıyor. Dolayısı ile yapılan testler daha güvenilir oluyorlar.
Arquillian kullanmaya başlamak çok kolay. Hali hazırda JUnit ya da TestNG kullanıyorsanız daha da kolay. JUnit ya da TestNG için kullandığınız IDE desteği doğrudan Arquillian için de geçerli olacak.
Yadığınız test kodları doğrudan uygulama kodlarını kullanabiliyor. Arquillian uygulamanız içinde bulunan kaynakları ( CDI Bean, EJB, Seam v.b. ) test kodunuza enjekte edecek. Mock objeler yazmakla uğraşmayacaksınız.
Çoğu test sisteminde kullanacağınız sınıfları ve diğer kaynakları seçmek büyük problemdir. Test sayınız arttıkça bunları yönetmek kendi başına bir problem haline gelmeye başlar. Arquillian ile bu problem de kalkıyor. Sadece test senaryonuzun gerektirdiği sınıfları içeren mikro paketler hazırlıyoruz. Bu da test uygulamalarının daha hızlı yüklenmesini ve test ortamının izolasyonnu kolaylaştırıyor.
Arquillian sadece uygulama içindeki iş kodlarını değil, uygulama arayüzünü test olabağı da sağlıyor. Arquillian Drone ile Selenium sunucusuna ulaşmak ve JSFUnit kodlarını çalıştırmak çok kolay.
Mevcut yöntemlerle, hata ayıklamak için uygulamanın tamamını sunucuya yüklüyor ve o şekilde hata ayıklama yapıyorduk. Arquillian test kodlarımızı doğrudan sunucu içinde çalıştırdığı için artık uygulamanın tamamını yüklemeye gerek kalmadan hata ayıklayabiliriz.
Çok irileşmiş bir kod üzerinde uygulamanının tamamının yüklenmesi için 15dk. dan fazla beklediğimi, bilirim. O arada da çoğu zaman ne yapacağımı unuturum :)
Hangi uygulama sunucuyu kullanıyorsunuz? Uygulamanız hangilerinde koşsun istiyorsunuz? Bu tamamen size kalmış.
Seçtiğiniz sunucu için halki hazırda desteklenmiyor mu? Hadi desteğini siz yazın?
Arquillian genişleyebilir bir altyapıya sahip. Kullandığınız fakat hali hazırda desteklenmeyen bir sistem mi var? Hadi kolları sıvayın ve siz yazmaya başlayın!
Arquillian bir arquillian testinde bulunması gereken 3 şey :
package org.arquillian.example;
import java.io.PrintStream;
/**
* A component for creating personal greetings.
*/
public class Greeter {
public void greet(PrintStream to, String name) {
to.println(createGreeting(name));
}
public String createGreeting(String name) {
return "Hello, " + name + "!";
}
}
package org.arquillian.example;
import org.junit.Assert;
import org.junit.Test;
public class GreeterTest {
@Test
public void should_create_greeting() {
Assert.fail("Not yet implemented");
}
}
package org.arquillian.example;
import javax.inject.Inject;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.Test;
import org.junit.Assert;
import org.junit.runner.RunWith;
@RunWith(Arquillian.class)
public class GreeterTest {
@Deployment
public static JavaArchive createDeployment() {
return ShrinkWrap.create(JavaArchive.class)
.addClass(Greeter.class)
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
}
@Inject
Greeter greeter;
@Test
public void should_create_greeting() {
Assert.assertEquals("Hello, Earthling!",
greeter.createGreeting("Earthling"));
greeter.greet(System.out, "Earthling");
}
}
Arquillian ile ilgi daha fazla bilgi için arquillian.org'u ziyaret edebilirsiniz!