अपने वर्ग मानते हुए की तरह कुछ है। आईई। आप एक ही पैकेज के साथ एक ही पैकेज में एक ही पैकेज बनाते हैं, और यह सुनिश्चित करते हैं कि यह वास्तविक स्प्रिंग क्लास से पहले लोड हो।
package org.springframework.web.context.request;
public class RequestContextHolder {
static RequestAttributes currentRequestAttributes() {
return new MyRequestAttributes();
}
static class MyRequestAttributes implements RequestAttributes {
public String getSessionId() {
return "stub session id";
}
// Stub out the other methods.
}
}
अब, जब आपके परीक्षण चला, वे अपने RequestContextHolder
वर्ग लेने और वसंत एक (classpath ऐसा करने के लिए सेट किया गया है यह सोचते हैं) करने के लिए उपयोग है कि वरीयता में होगा। यह आपके परीक्षणों को चलाने के लिए एक विशेष अच्छा तरीका नहीं है, लेकिन यदि आप जिस कक्षा में परीक्षण कर रहे हैं उसे बदल नहीं सकते हैं तो यह आवश्यक हो सकता है।
वैकल्पिक रूप से, आप एक अमूर्तता के पीछे सत्र आईडी पुनर्प्राप्ति छुपा सकते हैं।
public interface SessionIdAccessor {
public String getSessionId();
}
एक कार्यान्वयन बनाएँ::
public class RequestContextHolderSessionIdAccessor implements SessionIdAccessor {
public String getSessionId() {
return RequestContextHolder.currentRequestAttributes().getSessionId();
}
}
और अपनी कक्षा में अमूर्त का उपयोग करें:
class ClassToTest {
SessionIdAccessor sessionIdAccessor;
public ClassToTest(SessionIdAccessor sessionIdAccessor) {
this.sessionIdAccessor = sessionIdAccessor;
}
public void doSomething() {
String sessionId = sessionIdAccessor.getSessionId();
// Do something with sessionId
}
}
तो फिर आप अपने परीक्षण के लिए एक डमी कार्यान्वयन प्रदान कर सकते हैं उदाहरण के लिए एक इंटरफेस का परिचय:
public class DummySessionIdAccessor implements SessionIdAccessor {
public String getSessionId() {
return "dummy session id";
}
}
इस तरह की चीज अमूर्तताओं के पीछे कुछ पर्यावरणीय विवरण छिपाने के लिए एक सामान्य सर्वोत्तम अभ्यास को हाइलाइट करती है ताकि यदि आपका पर्यावरण बदलता है तो आप उन्हें स्वैप कर सकते हैं। यह 'असली' वाले लोगों के लिए डमी कार्यान्वयन को स्वैप करके अपने परीक्षणों को कम भंगुर बनाने के लिए समान रूप से लागू होता है।
स्रोत
2012-02-23 19:41:39
धन्यवाद @ निकोलस.hauschild। सही और साफ समाधान! – satoshi
@ निकोलस, त्वरित समाधान के लिए धन्यवाद, यह मेरे लिए काम करता है, धन्यवाद एक बार फिर – Bravo