2011-10-09 11 views
5

मेरे पास जर्सी संसाधन है जिसे मैं जुनीट के साथ परीक्षण करना चाहता हूं। संसाधन Guice प्रदाता का उपयोग करता है कुछ क्षेत्रों सुई:यूनिट परीक्षण जर्सी संसाधन गुइस इंजेक्शन वाले फ़ील्ड

@Path("/example/") 
class ExampleResource { 
    @Inject 
    Provider<ExampleActionHandler> getMyExampleActionHandlerProvider; 

    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    public List<ExamplePojo> getExampleList() { 
     ExampleActionHandler handler = getMyExampleActionHandlerProvider.get(); 
     handler.doSomething(); 
    ... 

यह सब खूबसूरती से काम करता है जब कोई वास्तविक सर्वर का उपयोग कर एपीआई सेवा करने के लिए, हालांकि परीक्षण यह समस्याग्रस्त है।

public class ApiTest extends JerseyTest { 

    public ApiTest() throws Exception { 
    super(); 
    ApplicationDescriptor appDescriptor = new ApplicationDescriptor(); 
    appDescriptor.setContextPath("/api"); 
    appDescriptor.setRootResourcePackageName("com.my.package.name"); 
    super.setupTestEnvironment(appDescriptor); 
    } 

    @Test 
    public void testHelloWorld() throws Exception { 
    String responseMsg = webResource.path("example/").get(String.class); 
    Assert.assertEquals("{}", responseMsg); 
    } 
} 

जाहिर है, Guice तो ExampleResource में खेतों प्रारंभ करने में कि handler.doSomething() कॉल एक NullPointerException नहीं होती तो संभव अवसर नहीं मिल रहा है:

मेरा परीक्षण वर्ग वर्तमान में तरह दिखता है।

क्या जर्सी को गिसिस का उपयोग करके उदाहरण संसाधन स्रोत को तुरंत चालू करने का कोई तरीका है ताकि प्रदाता काम करता हो?

+1

साथ इसे से ApplicationDescriptor वस्तु मिल मैं जानता हूँ कि यह एक छोटी सी देर हो चुकी है, लेकिन बंद मौका पर आप अभी भी इस को देख रहे हैं, तुम क्या कर खत्म किया? – talon8

+0

@minichate क्या आपको यह काम मिल गया? –

उत्तर

0

ऐसा करने का एक तरीका है कुछ चरणों में परीक्षण तोड़ना। आपको इंजेक्टर बनाने की आवश्यकता है जिसमें आप सेवा को कॉन्फ़िगर कर रहे हैं और उस इंजेक्टर का परीक्षण करें (Testing Guice Servlet bindings और Testing Guice can init servlets देखें)। इन परीक्षणों का उपयोग करके आप सुनिश्चित करते हैं कि आपके पास सही बाध्यियां हों। एक बार जब आप इंजेक्टर है,

ExampleResource exampleResource = injector.getInstance(ExampleResource.class); 
Assert.assertEquals(myList, getExampleList()); 
+0

इस दृष्टिकोण के साथ समस्या यह है कि जर्सी के जादू में से कोई भी उपलब्ध नहीं है - जैसे @DefaultValue() एनोटेटेड फ़ील्ड। मैं वास्तव में इस तरह से काम कर रहा हूं जिस तरह से मैं इसे चाहता हूं, बस एसओ पर कुछ सक्षम करने में इसे लपेटने की कोशिश कर रहा हूं। – minichate

+0

आपको यह काम कैसे मिला? – bobK

संबंधित मुद्दे