Modulių prieigos tyrinėjimas rūdžių projektuose
Dirbant su Rust, norint išlaikyti švarų ir modulinį kodą, būtina suprasti, kaip struktūrizuoti ir pasiekti modulius. Jei tik pradedate naudoti Rust arba dirbate su esamu projektu, galite susidurti su iššūkiu pasiekti modulius, esančius skirtingose projekto katalogo dalyse. Tai gali būti sudėtinga, ypač bandant nurodyti antrinį modulį iš bandomojo failo, esančio už pagrindinio šaltinio kodo. 🔍
„Rust“ projekto kontekste galimybė pasiekti „mod.rs“ failą iš skirtingų projekto dalių yra svarbi testavimui ir moduliavimui. Failas „mod.rs“ veikia kaip modulio įėjimo taškas ir dažnai naudojamas poaplankio turiniui tvarkyti. Dažna problema iškyla bandant pasiekti šį failą iš aplanko „tests/“, kuris yra už standartinio „src/“ katalogo ribų. 🛠️
Tarkime, kad dirbate su projektu, kuriame turite aplanką „controllers/“ kataloge „src/“ ir norite išbandyti kai kurias jo funkcijas. Žinodami, kaip tinkamai importuoti ir pasiekti „mod.rs“ failą iš „tests/test.rs“ failo, jūsų testavimo procesas bus sklandesnis. Tačiau „Rust“ modulių sistemai reikia gerai suprasti santykinius kelius ir modulio matomumą, kad tai būtų pasiekta sklandžiai.
Kitame skyriuje apžvelgsime šios problemos sprendimo veiksmus, tinkamai nurodydami „mod.rs“, esantį aplanke „controllers“ iš failo „test.rs“. Pabaigoje būsite pasirengę susidoroti su šiuo iššūkiu ir atlikti efektyvius „Rust“ projektų testus. Pasinerkime į keletą praktinių pavyzdžių, kad iliustruotų procesą!
komandą | Naudojimo pavyzdys |
---|---|
mod | Deklaruoja „Rust“ projekto modulį. Jis gali būti naudojamas įtraukti ir nurodyti kitus failus (pvz., mod valdiklius) arba konkrečias kodo dalis, pvz., submodulius. |
#[cfg(test)] | Atributai, nurodantys, kuri kodo dalis turėtų būti sudaryta tik atliekant bandymus. Tai padeda atskirti specifinę bandymo logiką nuo pagrindinės kodų bazės, užtikrinant, kad bandomasis kodas nepaveiktų gamybos kodo. |
use | Naudojamas konkretiems moduliams, funkcijoms ar tipams įtraukti į taikymo sritį. Pavyzdžiui, naudokite valdiklius::sms; atneša "sms" modulį iš "controllers" katalogo į bandomąjį failą. |
pub | Dėl šio raktinio žodžio modulis, funkcija arba kintamasis tampa prieinamas už dabartinės apimties ribų. Jis naudojamas siekiant užtikrinti, kad jūsų kodo dalys, pvz., „mod.rs“ funkcijos, būtų matomos kitiems moduliams, įskaitant testus. |
#[test] | Pažymi funkciją kaip vieneto testą. „Rust“ integruota testavimo sistema naudoja šią anotaciją, kad nustatytų funkcijas, kurias reikia vykdyti kaip bandymus, pvz., #[test] fn test_sms(). |
assert_eq! | Naudojamas norint patikrinti, ar dvi išraiškos įvertinamos ta pačia verte. Jei reikšmės nėra lygios, bandymas nepavyksta. Pavyzdžiui, assert_eq!(result, Ok("Pranešimas sėkmingai išsiųstas!")); patikrina, ar rezultatas atitinka laukiamą išvestį. |
Err | Nurodo rūdžių rezultato tipo variantą, nurodantį klaidą arba gedimą. Bandomuoju atveju jis naudojamas gedimo sąlygai imituoti, kaip matyti Err („Netinkama įvestis“). |
Ok | Atstovauja rezultato tipo sėkmės variantą. Jis naudojamas bandymuose, siekiant imituoti sėkmingą rezultatą, pvz., Gerai ("Pranešimas sėkmingai išsiųstas!"). |
mod.rs | Failo pavadinimas, kurį Rust naudoja katalogo moduliui deklaruoti. Tai padeda tvarkyti submodulius tame pačiame aplanke, todėl juos galima pasiekti, kai nurodote pagrindinį aplanką, pvz., mod valdiklius; pasiekia `controllers/mod.rs`. |
Scenarijaus supratimas: prieiga prie vaikų modulių rūdyje
Ankstesniame pavyzdyje ištyrėme, kaip pasiekti failą viduje aplanką iš bandomojo failo, esančio katalogas. Pasinerkime į tai, kaip veikia scenarijai ir kodėl kiekviena dalis yra svarbi. Pirmas žingsnis yra „Rust“ projekto modulių deklaravimas, ypač naudojant mod raktinis žodis, skirtas nuorodai į valdikliai modulį iš pagrindinės kodų bazės. Tai daro turinį valdikliai aplankas, pvz , pasiekiama likusiai jūsų kodo daliai, įskaitant testus. Be šios deklaracijos jūsų bandomieji failai negalės rasti arba naudoti modulio. Tai tarsi aiškaus vietos adreso pateikimas – be jo sistema negali žinoti, kur kreiptis. 🛠️
Kitas svarbus šių scenarijų aspektas yra naudojimas atributas. Šis atributas nurodo Rust kompiliuoti ir įtraukti konkrečias kodo dalis tik testavimo metu. Mūsų atveju jis naudojamas bandymo funkcijoms izoliuoti, todėl jos neturi įtakos pagrindinei programos logikai. Šis metodas padeda išlaikyti švarų kodą ir užtikrinti, kad testavimo logika netrukdytų gamybos kodui. Galite galvoti apie tai kaip apie bandymo aplinką, kuri suaktyvinama tik tada, kai esate pasirengęs patikrinti sistemos veikimą ar funkcionalumą. Tai užtikrina, kad sistema išliks stabili ir nepaveikta testavimo operacijų.
The raktinis žodis vaidina lemiamą vaidmenį įtraukiant konkrečius modulius ar funkcijas. Scenarijuje, leidžia mums pasiekti modulis viduje valdikliai aplanką iš bandomojo failo. Tai padaro visas viešąsias funkcijas viduje prieinama, kaip funkcija, kurią išbandome, kad patikrintume, ar ji veikia taip, kaip tikėtasi. Šis metodas yra įprastas „Rust“ kodo pakartotinio naudojimo ir moduliškumo modelis. Įsivaizduokite, kad esate bibliotekoje ir yra tarsi konkrečios knygos, kurios reikia darbui užbaigti, gavimas iš lentynos – sutaupoma laiko ir pastangų, nes jums pasiekiamos tik atitinkamos kodo dalys. 📚
Galiausiai, anotacija ir makrokomandos yra būtinos norint vykdyti ir patvirtinti mūsų vienetų testus. pažymi funkciją kaip bandomąjį atvejį, kurį automatiškai atpažįsta Rust testavimo sistema. Scenarijuje mes naudojome assert_eq! palyginti laukiamą rezultatą su tikruoju rezultatu funkcija. Jei reikšmės nesutampa, testas nepavyks, ir mes iš karto gausime atsiliepimą apie kodo funkcionalumą. Tai padeda užtikrinti, kad mūsų moduliai veiktų taip, kaip tikėtasi, ir leidžia greitai nustatyti ir išspręsti problemas. Tai panašu į apsauginį tinklą kūrimo metu – jei kas nors negerai, testas jį užfiksuos ir tiksliai nurodys, kur ieškoti.
Kaip pasiekti mod.rs failą iš rūdžių testo
Rust – Backend plėtra
mod controllers; // Declare the module from the controllers folder
use controllers::sms; // Use a specific module inside controllers
#[cfg(test)] // Mark the module for testing only
mod tests; // Declare the test module
#[cfg(test)] // Only compile the test code in test configuration
use crate::controllers::sms::send_sms; // Example of using the sms.rs file from controllers
#[test] // Declare a test function
fn test_sms_function() {
assert_eq!(send_sms("12345", "Test message"), Ok("Message sent successfully!")); // Test the function
}
Sprendimas su santykiniais keliais, naudojant mod.rs modulio prieigai
Rust – Backend plėtra su modulio organizavimu
mod controllers { // Declare the controllers module
pub mod sms; // Make the sms module accessible
pub mod mod.rs; // Ensure mod.rs is public and accessible in tests
}
#[cfg(test)] // Only include this part in test builds
mod tests; // Test module declaration
use crate::controllers::sms::send_sms; // Access the sms function from controllers
#[test] // Mark this function as a test
fn test_sms() {
let result = send_sms("12345", "Test message");
assert_eq!(result, Ok("Message sent successfully!")); // Validate test results
}
„Unit Test for Controllers“ Modulio prieiga iš test.rs
Rūdys – valdiklių modulio testavimas
mod controllers; // Declare the module path for controllers
use controllers::sms; // Use the sms module from controllers
#[cfg(test)] // This module is only included during testing
mod test; // Test module declaration
#[test] // The test annotation for unit tests
fn test_send_sms() {
let result = sms::send_sms("12345", "Hello, World!");
assert_eq!(result, Ok("Message sent successfully!")); // Check for expected result
}
#[test] // Another test for failure case
fn test_send_sms_failure() {
let result = sms::send_sms("", "");
assert_eq!(result, Err("Invalid input")); // Expect failure case
}
Kaip pasiekti ir struktūrizuoti rūdžių modulius testavimui
Dirbant su Rust, supratimas, kaip moduliai yra struktūrizuoti ir kaip juos pasiekti, yra esminė kūrimo proceso dalis. Tai ypač svarbu, kai norite pasiekti antrinį modulį, pvz tokio aplanko viduje kaip , iš bandomojo failo, esančio atskirame aplanke, pvz . Norint sėkmingai pasiekti ir naudoti antrinius modulius, reikia suprasti Rust modulių sistemą, kuri remiasi ir aiškiomis modulių deklaracijomis, ir santykinių kelių naudojimu. Rust naudoja tam tikrą hierarchiją, kurioje kiekviename aplanke gali būti a mod.rs failą, kad apibrėžtumėte modulio apimtį. Kai suprasite, kaip nurodyti šiuos kelius, galėsite efektyviai išbandyti įvairias savo kodų bazės dalis.
Norėdami pasiekti failą savo bandomajame kode, pirmiausia turėsite įsitikinti, kad modulis yra teisingai deklaruotas šaltinio kode. Mūsų pavyzdyje, teiginys pagrindiniame projekto kataloge padeda mums nurodyti aplanką, kuriame mod.rs failas yra. Tada galite naudoti bandomojo failo viduje Norėdami pasiekti konkrečius failus, pvz sms.rs ir jo funkcijas. Ši modulinė struktūra leidžia geriau organizuoti kodą ir pakartotinai naudoti, nes jums reikia tik importuoti konkrečias funkcijas ar tipus, reikalingus testavimui.
Svarbu pažymėti, kad „Rust“ modulių sistema yra labai griežta dėl matomumo. Pavyzdžiui, visos funkcijos ar tipai, kuriuos norite naudoti už pradinio modulio ribų, turi būti pažymėti raktinį žodį, kad jie būtų vieši. Šiuo atveju, funkcija viduje failas turi būti viešas, kad jį būtų galima pasiekti bandomajame faile. Dėl to sistema yra saugi ir naši, nes tik būtini komponentai yra veikiami kitose kodų bazės dalyse. Veiksmingai tvarkydami modulius ir testus galite užtikrinti, kad jūsų „Rust“ programa išliktų keičiamo dydžio ir prižiūrima. ⚙️
Dažnai užduodami klausimai apie prieigą prie vaikų modulių rūdyje
- Kaip iš bandomojo failo pasiekti modulį, esantį pakatalogyje?
- Galite naudoti raktinis žodis moduliui deklaruoti, o po to raktinį žodį, kad iš to modulio būtų įtrauktos konkrečios funkcijos ar tipai. Pavyzdžiui, daro sms.rs modulis pasiekiamas.
- Kas daro reiškia rūdyje?
- Jis žymi kodą, kuris turi būti sudarytas ir paleistas tik testavimo metu. Tai padeda užtikrinti, kad konkrečiam bandymui būdinga logika nepaveiks jūsų programos gamybos versijos.
- Kaip padaryti, kad funkcija būtų pasiekiama kitame „Rust“ modulyje?
- Turite deklaruoti funkciją kaip , todėl jis tampa viešas ir pasiekiamas už savo modulio ribų. Pavyzdžiui, leistų naudoti bandomuosiuose failuose.
- Kodėl yra naudojamas Rust?
- tarnauja kaip pagrindinis modulio aplanko įėjimo taškas. Tai leidžia Rust suskirstyti failus į submodulius, suteikiant aiškią struktūrą didesniems projektams.
- Kaip „Rust“ paleisti konkrečią bandymo funkciją?
- Galite pažymėti funkciją su kad tai būtų bandomoji funkcija. Norėdami paleisti testą, tiesiog paleiskite savo terminale.
- Kas daro atlikti rūdžių testus?
- lygina dvi vertes teste. Jei reikšmės nėra lygios, testas nepavyks. Ši makrokomanda dažniausiai naudojama norint patikrinti, ar tikroji išvestis atitinka numatomą išvestį vieneto testuose.
- Ar galiu pasiekti modulius iš aplanką pagrindiniame šaltinio kode?
- Ne, pagal numatytuosius nustatymus aplankas yra izoliuotas nuo pagrindinio kodo. Pagrindinius testų modulius galite pasiekti naudodami ir raktinius žodžius, kaip parodyta pavyzdyje.
- Kaip struktūrizuoti savo kodą dideliems „Rust“ projektams?
- Dideliems projektams sutvarkykite kodą į submodulius su failus kiekviename aplanke. Naudokite viešąsias funkcijas, pažymėtas prieigai tarp modulių.
- Kas nutiks, jei pamiršiu paskelbti funkciją viešai „Rust“?
- Jei funkcija nėra deklaruota kaip , jis bus privatus jo moduliui. Kiti moduliai, įskaitant bandomuosius failus, negalės jo pasiekti, nebent jie būtų aiškiai paskelbti viešai.
- Kaip galiu išbandyti modulius su išorinėmis priklausomybėmis „Rust“?
- Norėdami išbandyti modulius su išorinėmis priklausomybėmis, naudokite netikras bibliotekas arba priklausomybės įvedimą. Taip užtikrinama, kad jūsų testai būtų izoliuoti ir nepasikliauja išorinėmis sistemomis.
Supratimas, kaip pasiekti failas viduje aplankas iš bandomojo failo yra labai svarbus norint efektyviai struktūrizuoti Rust projektus. Naudojant ir mod, galite įtraukti konkrečius modulius į taikymo sritį, kad būtų galima atlikti efektyvų ir izoliuotą testavimą. Šis modulinis metodas ne tik pagerina kodo skaitomumą, bet ir pagerina pakartotinį naudojimą visame projekte. ⚙️
Apibendrinant, „Rust“ modulių organizavimas naudojant užtikrina švarų kodų atskyrimą ir lengvą prieigą. Laikydamiesi Rust konvencijų dėl modulio deklaravimo ir matomumo, kūrėjai gali išlaikyti keičiamo dydžio ir testuojamą kodų bazę. Atlikus gerai struktūrizuotus bandymus, jūsų „Rust“ projektas išliks stabilus ir palaikomas ilgą laiką. 📦
- Norėdami suprasti „Rust“ modulių sistemą, šiame straipsnyje pateikiamas išsamus paaiškinimas, kaip dirbti su „Rust“ moduliais. Daugiau apie Rust modulių sistemą galite perskaityti oficialiame puslapyje Rūdžių dokumentacija .
- Kitas naudingas šaltinis, norint sužinoti apie testavimą „Rust“ ir kaip susisteminti testus, yra oficialioje „Rust“ knygoje. Sužinokite daugiau čia: Rūdžių testavimas .