Rust में परीक्षण: फ्रेमवर्क और उपकरण
\n\nRust एक सिस्टम प्रोग्रामिंग भाषा है जो कोड की विश्वसनीयता और सुरक्षा पर अत्यधिक ध्यान देती है। अंतर्निहित परीक्षण प्रणाली डेवलपर्स को अतिरिक्त लाइब्रेरी स्थापित किए बिना unit-परीक्षण, इंटीग्रेशन परीक्षण और डॉक्यूमेंटेशन परीक्षण लिखने की अनुमति देती है। हालाँकि, जटिल परिदृश्यों के लिए - पैरामीटरीकरण, यादृच्छिक डेटा उत्पन्न करना या मॉकिंग - Rust समुदाय ने शक्तिशाली फ्रेमवर्क बनाए हैं। इस लेख में, हम Rust में परीक्षण के प्रमुख उपकरणों पर चर्चा करेंगे।
\n\nअंतर्निहित मॉड्यूल test
\n\nRust अंतर्निहित मॉड्यूल test के साथ आता है, जो #[test] विशेषता के माध्यम से सक्रिय होता है। परीक्षण चलाने के लिए कमांड cargo test का उपयोग किया जाता है। एक सरल unit-परीक्षण का उदाहरण:
// src/lib.rs\npub fn add(a: i32, b: i32) -> i32 {\n a + b\n}\n\n#[cfg(test)]\nmod tests {\n use super::*;\n\n #[test]\n fn test_add() {\n assert_eq!(add(2, 2), 4);\n }\n\n #[test]\n fn test_add_negative() {\n assert_eq!(add(-1, 1), 0);\n }\n}\n\nअंतर्निहित मॉड्यूल की प्रमुख क्षमताएँ:
\n- \n
- विशेषताएँ:
#[test],#[ignore],#[should_panic]। \n - अभिकथन मैक्रो:
assert!,assert_eq!,assert_ne!। \n - इंटीग्रेशन परीक्षण:
tests/फ़ोल्डर में रखे जाते हैं और सार्वजनिक API का परीक्षण करते हैं। \n - डॉक्यूमेंटेशन परीक्षण: doc-टिप्पणियों में कोड उदाहरण, जो
cargo testके माध्यम से जाँचे जाते हैं। \n
अधिकांश परियोजनाओं के लिए यह पर्याप्त है। लेकिन जब पैरामीटरीकरण, यादृच्छिक डेटा उत्पन्न करना या मॉकिंग की आवश्यकता होती है, तब विशेष फ्रेमवर्क सहायता प्रदान करते हैं।
\n\nफ्रेमवर्क rstest — पैरामीटरीकृत परीक्षण
\n\nलाइब्रेरी rstest Python में pytest के समान परीक्षणों के पैरामीटरीकरण के लिए एक शक्तिशाली तंत्र प्रदान करती है। यह कोड दोहराव के बिना इनपुट डेटा और अपेक्षित परिणामों के कई सेट निर्दिष्ट करने की अनुमति देती है।
स्थापना:
\n[dev-dependencies]\nrstest = "0.22"\n\nपैरामीटरीकृत परीक्षण का उदाहरण:
\n\nuse rstest::rstest;\n\n#[rstest]\n#[case(1, 2, 3)]\n#[case(0, 0, 0)]\n#[case(-1, 1, 0)]\nfn test_add(#[case] a: i32, #[case] b: i32, #[case] expected: i32) {\n assert_eq!(add(a, b), expected);\n}\n\nrstest की क्षमताएँ:
- \n
#[case]के माध्यम से पैरामीटरीकरण। \n #[random]के माध्यम से यादृच्छिक डेटा उत्पन्न करना। \n #[fixture]के माध्यम से संदर्भित फिक्स्चर। \n - एसिंक्रोनस परीक्षणों के लिए समर्थन। \n
यह फ्रेमवर्क विशेष रूप से गणितीय फ़ंक्शन, पार्सर या एल्गोरिदम के परीक्षण में उपयोगी है, जहाँ कई सीमांत मामलों की जाँच करने की आवश्यकता होती है।
\n\nProperty-based testing proptest के साथ
\n\nProperty-based testing (गुण-आधारित परीक्षण) एक ऐसी विधि है जिसमें आप इनवेरिएंट (गुण) का वर्णन करते हैं जो सभी संभावित इनपुट डेटा के लिए सत्य होने चाहिए। लाइब्रेरी proptest यादृच्छिक इनपुट डेटा उत्पन्न करती है और इन गुणों की जाँच करती है।
स्थापना:
\n[dev-dependencies]\nproptest = "1.5"\n\nउदाहरण: यह जाँचना कि सॉर्टिंग लंबाई और सभी तत्वों को संरक्षित करती है:
\n\nuse proptest::prelude::*;\n\nproptest! {\n #[test]\n fn test_sort_keeps_elements(mut vec: Vec<i32>) {\n let original_len = vec.len();\n let mut sorted = vec.clone();\n sorted.sort();\n assert_eq!(sorted.len(), original_len);\n for item in &vec {\n assert!(sorted.contains(item));\n }\n }\n}\n\nproptest के लाभ:
- \n
- हजारों यादृच्छिक परिदृश्यों का स्वचालित उत्पादन। \n
- न्यूनीकरण (shrink) — परीक्षण विफल होने पर, यह सबसे छोटे विफल इनपुट को खोजने का प्रयास करता है। \n