Rust में परीक्षण: फ्रेमवर्क और उपकरण

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Rust में परीक्षण: फ्रेमवर्क और उपकरण



Rust एक सिस्टम प्रोग्रामिंग भाषा है जो विश्वसनीयता और सुरक्षा पर अत्यधिक ध्यान देती है। अंतर्निहित परीक्षण प्रणाली प्रमुख विशेषताओं में से एक है, जो तृतीय-पक्ष फ्रेमवर्क स्थापित किए बिना गुणवत्तापूर्ण कोड लिखने की अनुमति देती है। इस लेख में, हम Rust में परीक्षण के लिए मुख्य उपकरणों की विस्तार से जाँच करेंगे: सरल यूनिट परीक्षणों से लेकर जटिल property-based परीक्षणों और बेंचमार्क तक।



अंतर्निहित परीक्षण फ्रेमवर्क



Rust में, परीक्षण cargo test कमांड के साथ चलाए जाते हैं। परीक्षण सामान्य फ़ंक्शन होते हैं जिन्हें #[test] विशेषता से चिह्नित किया जाता है। फ्रेमवर्क स्वचालित रूप से आपके प्रोजेक्ट में ऐसे सभी फ़ंक्शन एकत्र करता है और उन्हें चलाता है।



यूनिट परीक्षण



यूनिट परीक्षण आमतौर पर परीक्षण किए जा रहे कोड के समान फ़ाइल में, एक अलग tests मॉड्यूल में स्थित होते हैं। यह निजी फ़ंक्शनों का परीक्षण करने की अनुमति देता है।



// src/lib.rspub fn add(a: i32, b: i32) -> i32 {    a + b}

fn private_helper(x: i32) -> i32 { x * 2}

#[cfg(test)]mod tests { use super::*;

#[test] fn test_add() { assert_eq!(add(2, 3), 5); }

#[test] fn test_private_helper() { assert_eq!(private_helper(5), 10); }}


चलाएँ: cargo test



इंटीग्रेशन परीक्षण



इंटीग्रेशन परीक्षण प्रोजेक्ट रूट स्तर पर tests/ निर्देशिका में स्थित होते हैं। इस फ़ोल्डर में प्रत्येक फ़ाइल एक अलग क्रेट है जो आपके सार्वजनिक API का परीक्षण करती है।



// tests/integration_test.rsuse my_crate::add;

#[test]fn test_add_integration() { assert_eq!(add(10, 20), 30);}


जाँच के लिए मैक्रोज़



Rust जाँच लिखने के लिए कई अंतर्निहित मैक्रोज़ प्रदान करता है:



  • assert!(expression) — यदि अभिव्यक्ति गलत है तो पैनिक करता है।
  • assert_eq!(left, right) — PartialEq का उपयोग करके समानता की जाँच करता है।
  • assert_ne!(left, right) — असमानता की जाँच करता है।
  • debug_assert!() — केवल debug बिल्ड में काम करता है।


#[test]fn test_with_assert() {    let result = some_function();    assert!(result.is_ok(), "Ok अपेक्षित था, प्राप्त हुआ: {:?}", result);    assert_eq!(result.unwrap(), 42);}


Doctests



Rust की सबसे शक्तिशाली विशेषताओं में से एक दस्तावेज़ीकरण में सीधे परीक्षण लिखने की क्षमता है। /// या //! ब्लॉक के अंदर का कोड स्वचालित रूप से संकलित और परीक्षण के रूप में चलाया जाता है।



/// दो संख्याओं को जोड़ता है।////// # उदाहरण////// ```/// use my_crate::add;/// assert_eq!(add(1, 2), 3);/// ```pub fn add(a: i32, b: i32) -> i32 {    a + b}


चलाएँ: cargo test — doctests सामान्य परीक्षणों के साथ चलेंगे।



proptest के साथ Property-based परीक्षण



proptest लाइब्रेरी (Python में Hypothesis या Haskell में QuickCheck का एनालॉग) यादृच्छिक इनपुट डेटा उत्पन्न करने और इनवेरिएंट की जाँच करने की अनुमति देती है।



use proptest::prelude::*;

fn reverse_string(s: &str) -> String { s.chars().rev().collect()}

proptest! { #[test] fn test_reverse_twice(s in ".*") { let reversed = reverse_string(&s); let double_reversed = reverse_string(&reversed); assert_eq!(s, double_reversed); }}


स्थापित करें: cargo add proptest



बेंचमार्क



Rust में प्रदर्शन मापने के लिए, cargo bench के माध्यम से स्थिर बेंचमार्क (Rust 1.78 से) और अधिक जटिल परिदृश्यों के लिए criterion क्रेट उपलब्ध हैं।



अंतर्निहित बेंचमार्क (nightly)



#![feature(test)]extern crate test;

#[bench]fn bench_add(b: &mut test::Bencher) { b.iter(|| add(1, 2));}


criterion के साथ बेंचमार्क



अनुशंसाएँ