मैं जावा अनुप्रयोग विकसित कर रहा हूं जिसमें कई जटिल हाइबरनेट मानदंड प्रश्न हैं। मैं यह मानदंडों का परीक्षण करना चाहता हूं कि वे सही चुन रहे हैं, और केवल सही, वस्तुएं। इसके लिए एक दृष्टिकोण, निश्चित रूप से, एक इन-मेमोरी डेटाबेस (उदा। एचएसक्यूएल) स्थापित करना है और, प्रत्येक परीक्षण में, मानदंडों का उपयोग करके उस डेटाबेस में एक राउंड ट्रिप करें और फिर जोर दें कि क्वेरी परिणाम मेरी अपेक्षाओं से मेल खाते हैं।किसी भी डेटाबेस का उपयोग किए बिना हाइबरनेट मानदंड क्वेरी का परीक्षण कैसे करें?
लेकिन मैं एक आसान समाधान की तलाश में हूं, क्योंकि हाइबरनेट मानदंड केवल जावा ऑब्जेक्ट्स के बारे में तार्किक भविष्यवाणियों का एक विशेष प्रकार है। इस प्रकार वे, सिद्धांत रूप में, किसी भी डेटाबेस तक पहुंच के बिना परीक्षण किया जा सकता है।
InMemoryCriteria criteria = InMemoryCriteria.forClass(Cat.class)
.add(Restrictions.like("name", "Fritz%"))
.add(Restrictions.or(
Restrictions.eq("age", new Integer(0)),
Restrictions.isNull("age")))
assertTrue(criteria.apply(new Cat("Foo", 0)))
assertTrue(criteria.apply(new Cat("Fritz Lang", 12)))
assertFalse(criteria.apply(new Cat("Foo", 12)))
मापदंड इस तरह उत्पादन कोड में इस्तेमाल किया जा सकता है:
class Cat {
Cat(String name, Integer age){
this.name = name;
this.age = age;
}
...
}
मैं मापदंड प्रश्नों बनाने के लिए कुछ इस तरह करते हैं, चाहते हैं: उदाहरण के लिए, यह सोचते हैं कि वहाँ एक इकाई Cat
कहा जाता है कि :
criteria.getExecutableCriteria(session); //similar to DetachedCriteria
क्या कोई जावा लाइब्रेरी है जो इस तरह की परीक्षा संभव बनाती है?
उत्तर देने के लिए धन्यवाद! लेकिन, जैसा कि आप इंगित करते हैं, इस तरह का परीक्षण सत्यापित करता है कि वर्ग * लागू * कैसे है, यह नहीं कि * व्यवहार * कैसे किया जाता है। इसके अलावा, यह परीक्षण किसी अन्य सेवा पर केंद्रित है, जो मानदंडों का उपयोग करता है। यद्यपि यह निश्चित रूप से कार्यक्षमता का एक महत्वपूर्ण टुकड़ा है, यह परीक्षण करने के लिए अपेक्षाकृत आसान होना चाहिए (इंटरफेस के सही उपयोग के साथ कक्षाओं को डीकॉप्लिंग करके, जिम्मेदारियों को अलग करना आदि)। यहां, मैं मानदंड वस्तु का परीक्षण करने में अधिक रुचि रखता हूं। –