जर्सी-spring3 (संस्करण 2.9.1) पुस्तकालय डिबगिंग के बाद ऐसा लगता है कि समस्या SpringComponentProvider.createSpringContext में निहित है
private ApplicationContext createSpringContext() {
ApplicationHandler applicationHandler = locator.getService(ApplicationHandler.class);
ApplicationContext springContext = (ApplicationContext) applicationHandler.getConfiguration().getProperty(PARAM_SPRING_CONTEXT);
if (springContext == null) {
String contextConfigLocation = (String) applicationHandler.getConfiguration().getProperty(PARAM_CONTEXT_CONFIG_LOCATION);
springContext = createXmlSpringConfiguration(contextConfigLocation);
}
return springContext;
}
यह जाँच करता है एक संपत्ति नाम "contextConfig" आवेदन गुण में मौजूद रहने पर और यदि नहीं, तो यह वसंत अनुप्रयोग संदर्भ शुरू करता है। भले ही आप अपने परीक्षण में वसंत आवेदन संदर्भ प्रारंभ, जर्सी एक और संदर्भ बना सकते हैं और बजाय का उपयोग करें कि एक होगा। इसलिए हमें जर्सी एप्लिकेशन क्लास में हमारे परीक्षणों से एप्लिकेशन कॉन्टेक्स्ट को किसी भी तरह से पास करना होगा।
@ContextConfiguration(locations = "classpath:jersey-spring-applicationContext.xml")
public abstract class JerseySpringTest
{
private JerseyTest _jerseyTest;
public final WebTarget target(final String path)
{
return _jerseyTest.target(path);
}
@Before
public void setup() throws Exception
{
_jerseyTest.setUp();
}
@After
public void tearDown() throws Exception
{
_jerseyTest.tearDown();
}
@Autowired
public void setApplicationContext(final ApplicationContext context)
{
_jerseyTest = new JerseyTest()
{
@Override
protected Application configure()
{
ResourceConfig application = JerseySpringTest.this.configure();
application.property("contextConfig", context);
return application;
}
};
}
protected abstract ResourceConfig configure();
}
ऊपर वर्ग हमारे परीक्षणों से आवेदन संदर्भ लेने के लिए और कॉन्फ़िगर ResourceConfig को इसे पारित ताकि SpringComponentProvider जर्सी के लिए एक ही आवेदन संदर्भ वापस आ जाएगी होगा: समाधान निम्नलिखित है। जर्सी विशिष्ट वसंत विन्यास को शामिल करने के लिए हम जर्सी-वसंत-अनुप्रयोगकॉन्टेक्स्ट.एक्सएमएल का भी उपयोग करते हैं।
हम जर्सीटेस्ट से उत्तराधिकारी नहीं हो सकते क्योंकि यह परीक्षण आवेदन संदर्भ शुरू होने से पहले निर्माता में एप्लिकेशन को प्रारंभ करता है।
अब आप testContext.xml में उदाहरण
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:testContext.xml")
public class SomeTest extends JerseySpringTest
{
@Autowired
private AObject _aObject;
@Test
public void test()
{
// configure mock _aObject when(_aObject.method()).thenReturn() etc...
Response response = target("api/method").request(MediaType.APPLICATION_JSON).get();
Assert.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
}
@Override
protected ResourceConfig configure()
{
return new ResourceConfig(MyResource.class);
}
}
के लिए अपने परीक्षण बनाने के लिए आदेश में एक नकली AObject इंजेक्षन करने के लिए निम्नलिखित परिभाषा जोड़ने इस आधार वर्ग का उपयोग कर सकते हैं।
<bean class="org.mockito.Mockito" factory-method="mock">
<constructor-arg value="com.yourcompany.AObject" />
</bean>
स्रोत
2014-07-01 14:24:31
महान जवाब! धन्यवाद –
आपको यह उत्तर यह मेरी समस्याओं को हल करती है जर्सी परीक्षण ढांचे और वसंत-परीक्षण के साथ एकीकरण के परीक्षण विकसित करने के लिए बहुत बहुत धन्यवाद। विशेष रूप से मेरी समस्या एक ही ApplicationContext में परीक्षण निष्पादन के दौरान नकली वस्तुओं का निर्देश देने की थी। सबको धन्यवाद, – bifulcoluigi