java - यूनिट परीक्षण फार्म बीन्स के लिए अच्छा पैटर्न जो स्प्रिंग एमवीसी में एनोटेशन-आधारित सत्यापन है




unit-testing spring-mvc (3)

आप अपने बीन्स के लिए यूनिट परीक्षण भी लिख सकते हैं, जो कि वैलेटेटर कारखाने का उपयोग करते हुए JSR303 में एनोटेट किया गया है। उदाहरण देखें: http://musingsofaprogrammingaddict.blogspot.com/2009/02/using-bean-validation-with-spring.html

किसी बीन के लिए एनोटेशन आधारित सत्यापन का उपयोग करते समय, यह सुनिश्चित करने के लिए कि प्रत्येक फ़ील्ड के लिए सही सत्यापन एनोटेशन निर्दिष्ट किए जाते हैं, उन बीन्स के परीक्षण के लिए सबसे अच्छा अभ्यास क्या है?

उदाहरण के लिए, यदि आपके पास है:

public class MyForm {
    @NotNull
    private String name;
}

यह सत्यापित करने का सबसे अच्छा तरीका क्या है कि @NotNull को इसके लिए लागू किया गया है?

एक स्पष्ट तरीका है एक मान्यकर्ता बनाने के लिए, उस पर एक नल फेंकना और इसे असफल होने की उम्मीद है। लेकिन मेरे विचार में यह सबसे अच्छा तरीका नहीं है क्योंकि आप @NotNull के व्यवहार और कार्यान्वयन का परीक्षण करेंगे, जिसका उपयोग फ्रेमवर्क पर भरोसा करने के बजाय होगा।

आदर्श रूप से मैं प्रतिबिंब या एक उपयोगिता का उपयोग करना चाहूंगा जो मुझे सिर्फ यह @NotNull की संभावना देता है कि कोई भी @NotNull (और कोई अन्य) सत्यापन किसी दिए गए फ़ील्ड पर लागू नहीं किया जाता है, जो वैल्यूएशन को विफल करने वाले विभिन्न संयोजनों को भेजने के बजाय।

क्या ऐसा करने का एक शानदार तरीका है, या मैं सामान्य रूप में सही रास्ते पर हूं?


आप इसे आसानी से जांच सकते हैं

मान लें कि आप हाइबरनेट वैलिडेटर का उपयोग कर रहे हैं। अधिक या कम, यह ऐसा कुछ होना चाहिए

    import javax.validation.ConstraintViolation;
    import junit.framework.Assert;
    import org.hibernate.validator.HibernateValidator;
    import org.junit.Before;
    import org.junit.Test;
    import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;

 private LocalValidatorFactoryBean localValidatorFactory;


@Before
public void setup() {
    localValidatorFactory = new LocalValidatorFactoryBean();
    localValidatorFactory.setProviderClass(HibernateValidator.class);
    localValidatorFactory.afterPropertiesSet();
}

  @Test
  public void testNullValidationError() {
        final MyForm myForm= new MyForm ();
        myForm.setName(null);
        Set<ConstraintViolation<MyForm >> constraintViolations =      localValidatorFactory.validate(myForm);
        Assert.assertTrue("Your error message", constraintViolations.notNull == null);
    }

हम अपनी प्रस्तुति परत और स्प्रिंग कंटेनर के बीच एकीकरण परीक्षण के भाग के रूप में बीन प्रॉपर्टी पर एनोटेशन का परीक्षण करते हैं।

हम क्या करते हैं नकली मोकपोर्टेलेट कंटैक्स, डिस्पैचररपोर्टलेट और मॉकरूइवेट्स (ये क्लास स्प्रिंग-टेस्ट लाइब्रेरी का हिस्सा हैं) बनाते हैं, तो इन्हें भरें ताकि वे असली फॉर्म की तरह दिखे और डिपार्चर पोर्टलेट को कॉल करें। (हमारे पास पोर्टल पर्यावरण है लेकिन इससे कोई फर्क नहीं पड़ता)

उसके बाद आप जांच सकते हैं कि आपके बैकएण्ड को उपयुक्त तरीके से बुलाया गया था या प्रतिक्रिया में अपेक्षित मान्यता त्रुटियों के साथ बाध्यकारी परिणाम हैं, जो कि आपको क्या चाहिए ..







bean-validation