2009-05-26 13 views
7

Restlet kitaplığı ile uygulanan bir JAX-RS web servisim var ve şimdi test etmek istiyorum. Bunu yapabilmek için, bu hizmeti, alaylı servislerle önceden başlatarak testime dahil etmek istiyorum.RESTLET web hizmetleri için bir test vakası yazmanın en iyi yolu nedir?

Böyle bir hizmeti barındırmanın ve test çağrılarını yürütmenin en iyi yolu nedir?

@Path("/srv") 
public class MyService 
{ 
    @GET 
    public void action(@Context UriInfo uri) 
    { ... } 
} 

@Test 
public void myTest() 
{ 
    MyService service = new MyService(); 
    service.setSomething(...); 

    // How do I host it? 

    // How do I call it? 
} 

cevap

0

Restlet çeşitli sunucu "konnektörleri" ile ilgili web hizmetleri çalıştırmak sağlar ve başka bir sunucudan geçiş oldukça kolaydır. Web hizmetlerimizi normalde bir Sun Glassfish Java EE uygulama sunucusu kümesinde çalıştırıyoruz, ancak bunları test etmek için web servislerini bağımsız bir uygulama olarak çalıştırmak için Simple HTTP Server ile bağlantı veren bir bağlayıcı kullanıyoruz. Ayrıca AsyncWeb, Jetty, Grizzly ve bir iç HTTP sunucusu için sunucu bağlaçları da vardır.

İstemci tarafında, Restlet istemci kitaplığını dikkate almalısınız. Oldukça özlü ve Restlet sunucularıyla iyi uyum sağlamak için tasarlandı. Apache HTTP İstemcisi bağlayıcısını kullanıyoruz.

Test için, Fetcher sınıfını oluşturduk. Bu Restlet istemci API'sı kullanılarak uygulanır. Kullanmak için, hemen hemen getir() yöntemini çağırın: ("http://localhost:8182" demek) web hizmetleri temel tanım üzerine verilen kaynağın adı tacks)

DTO person = fetch("/employee/1234"); 
DTO department = fetch("/department/" + person.getDepartment()); 

Fetch (e Restlet istemci API kullanır XML gösterimini getirip, getirilen XML'i bir veri aktarım nesnesine (POJO) gönderir.

Bunun gerçekten ünite testini oldukça kolaylaştırdığını görebilirsiniz. Ünite testlerinden önce, web servislerini Simple veya Jetty gibi bağımsız bir sunucuda tetiklersiniz. Ünite testleri sırasında, DTO'ları, DOM ağaçlarını, json.org nesnelerini veya Fetcher'ı kullanarak ne varsa getirin, ardından geri döndürülenlere test onaylamaları uygulayın. Daha ayrıntılı bir seviyede test etmeniz gerekirse, Restlet istemci kodunu doğrudan kullanabilirsiniz.

+1

Sorunun tam noktası, bir web hizmetinin/bileşeninin işlemin nasıl başlatılacağını bulmaktı. Uzak bir sunucuda istemiyorum/çalışamıyorum. Hizmetin bir web hizmeti olarak sunulmadan ÖNCE alay edilen örneklerle başlatılması gerekir. Bir sınıfın/bileşenin INSTANCE'ı bir hizmet olarak ortaya koymanın bir yolu var mı? – IgorM

+0

herhangi bir cevap? IgorM - çalıştın mı? – Vatsala