2009-05-18 17 views
13

मैं नए स्टाइल एनोटेशन का उपयोग करने के लिए एक स्प्रिंग एमवीसी नियंत्रक माइग्रेट कर रहा हूं, और एक कमांड ऑब्जेक्ट को सत्यापित करने वाले नियंत्रक विधि का परीक्षण करना चाहता हूं (नीचे सरल उदाहरण देखें)।एनोटेशन का उपयोग करते समय स्प्रिंग एमवीसी बाइंडिंग रीसेट का मज़ाक उड़ाते हुए

@RequestMapping(method = RequestMethod.POST) 
public String doThing(Command command, BindingResult result, 
        HttpServletRequest request, HttpServletResponse response, 
        Map<String, Object> model){ 
    ThingValidator validator = new ThingValidator(); 
    validator.validate(command, result); 
... other logic here 
    } 

मेरे समस्या मैं अपने इकाई परीक्षण में नियंत्रक की विधि कहते हैं, और नकली मान प्रदान करने के लिए कोड को ठीक से व्यायाम करने के लिए उसके हस्ताक्षर को संतुष्ट करना है, और मैं बाहर काम नहीं कर सकता एक BindingResult उपहास करने के लिए कैसे।

पुरानी शैली नियंत्रक में हस्ताक्षर ने केवल एक HttpServletRequest और HttpServletResponse लिया, जो आसानी से मजाक कर रहे थे, लेकिन नई एनोटेशन शैली की लचीलापन के कारण, हस्ताक्षर के माध्यम से किसी को बहुत अधिक पास करना पड़ता है।

एक यूनिट परीक्षण में उपयोग के लिए स्प्रिंग बाइंडिंग रीसेट का नकल कैसे कर सकता है ??

उत्तर

15

बाइंडिंग रिसेट एक इंटरफ़ेस है, तो क्या आप बस उस इंटरफ़ेस के स्प्रिंग कार्यान्वयन में से किसी एक में पास नहीं हो सकते हैं?

मैं अपने वसंत MVC कोड में व्याख्या का उपयोग नहीं है, लेकिन जब मैं मैं सिर्फ BindException का एक उदाहरण में पास और फिर मान यह assertEquals आदि

+4

हाय मार्क, जो मुझे सही ट्रैक धन्यवाद पर डाल देता है। का उपयोग करना बाइंडिंग रीसेट बाध्यकारीResult = नया बीनप्रॉपर्टी बाइंडिंग रीसेट (कमांड, "कमांड"); और मेरे परीक्षण के भीतर मॉडल में कमांड ऑब्जेक्ट चिपकाना मेरे परीक्षण को हल करना प्रतीत होता था। –

+1

इस तरह मैं इसे भी करता हूं। –

+0

इसके लिए धन्यवाद, मुझे बहुत मदद की! – Stefan

14

में देता का उपयोग एक सत्यापनकर्ता की सत्यापित करें विधि का परीक्षण करना चाहते तुम भी BindingResult की एक नकली बनाने के लिए Mockito की तरह कुछ का उपयोग करें और अपने नियंत्रक विधि करने के लिए कि गुजरती हैं, यानी

import static org.mockito.Mockito.mock; 
import static org.mockito.Mockito.when; 
import static org.mockito.Mockito.verifyZeroInteractions; 

@Test 
public void createDoesNotCreateAnythingWhenTheBindingResultHasErrors() { 
    // Given 
    SomeDomainDTO dto = new SomeDomainDTO(); 
    ModelAndView mv = new ModelAndView(); 

    BindingResult result = mock(BindingResult.class); 
    when(result.hasErrors()).thenReturn(true); 

    // When 
    controller.create(dto, result, mv); 

    // Then 
    verifyZeroInteractions(lockAccessor); 
} 

यह आपको अधिक विकल्प और मचान को आसान बनाने में कर सकते हैं कर सकते हैं।

+0

यहां 'लॉकएसेसर' क्या है? –

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