5

में प्रिंसिपल इंजेक्ट करें स्प्रिंग 3 एमवीसी के हिस्से के रूप में वर्तमान में लॉग इन उपयोगकर्ता (सिद्धांत) ऑब्जेक्ट को नियंत्रक विधि में इंजेक्ट करना संभव है।स्प्रिंग 3 एमवीसी कंट्रोलर एकीकरण परीक्षण - विधि

उदा। http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-ann-requestmapping-arguments:

@Controller 
public class MyController { 

    @RequestMapping(value="/update", method = RequestMethod.POST) 
    public String update(ModelMap model, Principal principal) { 

     String name = principal.getName(); 
     ... the rest here 
    } 
} 

इस स्प्रिंग 3 प्रलेखन यहाँ के हिस्से के रूप प्रलेखित है।

यह उत्पादन कोड में काम करता है। हालांकि मुझे नहीं पता कि इसका परीक्षण कैसे किया जाए। जब मैं एकीकरण परीक्षण (वसंत सुरक्षा संदर्भ भी स्थापित कर रहा हूं) और नियंत्रक हैंडल विधि को कॉल करें तो प्रिंसिपल हमेशा शून्य है!

public class FareTypeControllerIntegrationTest extends SpringTestBase { 

@Autowired 
private MyController controller; 

@Autowired 
private AnnotationMethodHandlerAdapter handlerAdapter; 

private final MockHttpServletRequest request = new MockHttpServletRequest(); 
private final MockHttpServletResponse response = new MockHttpServletResponse(); 

@Test 
public void testUpdate() throws Exception { 
    request.setRequestURI("/update"); 
    request.setMethod(HttpMethod.POST.name()); 
    ... setup rest of request 

    ModelAndView mav = handlerAdapter.handle(request, response, controller); 

    .. rest of assertions 

} 

परीक्षण सही ढंग से चल रहे हैं और प्रधान के अलावा सब कुछ रिक्त है।

कोई विचार?

TIA

अयूब

उत्तर

10

एक के बाद वसंत स्रोतों में त्वरित रूप से कार्य करना चाहिए:

request.setUserPrincipal(somePrincipal); 
+0

मैंने कोशिश की और यह काम किया। बहुत सरल और साफ। धन्यवाद –

1

मैं (जैसे प्रधान पैरामीटर समाधानकर्ता परीक्षण किए जाने के रूप में) से पहले वसंत सुरक्षा का उपयोग कर कोड बुला करने के लिए अपने परीक्षण में कुछ इस तरह करते हैं:

SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken("wiseau", "Love is blind")); 
4

मेरे पास tr है कुछ समय पहले ऐसा करने के लिए, यहां वह तरीका है जिसका उपयोग मैंने प्रमाणीकरण स्थापित करने के लिए किया था।

protected void setSecurityContext(String login){ 
      userDetailsTest = userManager.loadUserByUsername(login); 
      TestingAuthenticationToken testingAuthenticationToken = new TestingAuthenticationToken(userDetailsTest, userDetailsTest.getAuthorities()); 
      SecurityContext securityContext = new SecurityContextImpl(); 
      securityContext.setAuthentication((Authentication) testingAuthenticationToken); 
      SecurityContextHolder.setContext(securityContext); 
     } 

फिर मैं इसे परीक्षण के @ पहले तरीके से कॉल करता हूं। उम्मीद है कि यह मदद करता है।

+0

हाय मैंने उपर्युक्त उदाहरण की कोशिश की, जो कि मैंने पहले की कोशिश की थी। –

+0

ओह, मेरा मतलब क्या है कि मैंने उपरोक्त कोशिश की और यह काम नहीं कर रहा था। धन्यवाद –

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