Rust: алғашқы қадамнан жеке жоспарлау құралына дейін 16-сабақ (барлығы 20)
Алғашқы автоматты тест
Сабақ 16. Есептеу нәтижесін күтілетін мәнмен автоматты түрде салыстыру.
Мәтін ИИ көмегімен аударылды.
Алдын ала: 1–15-сабақтар, әсіресе функциялар мен жиымдар. Әзірге сыртқы кітапханасыз сандық есептеуді тексереміз.
Тұрмыстық бейне және тірек карта
Жіберер алдында сәлемдемені өлшедіңіз делік. «Салмағы 5 кг болуы керек» деп жазып қойсаңыз, ертең сол тексеруді қайталай аласыз. Автоматты тест те код үшін кіріс пен күтілетін нәтижені сақтап, шыққан нәтижемен салыстырады. Бейненің шегі бар: бір сәлемдеменің салмағы барлық сәлемдеме дұрыс дегенді білдірмейді; бір өткен тест функцияның барлық кіріске дұрыс екенін дәлелдемейді.
Кіріс → функция → нақты нәтиже ↔ күтілетін нәтиже → тест хабарламасы. Кодқа қарамай тұрып осы тізбекті есте сақтап айтып көріңіз.
Бағдарлама мен тестті іске қосу
Алдымен екі жаңа жазылымды түсінейік. #[test] — аргументсіз функцияның алдындағы атрибут, яғни белгі. # белгіні бастайды, төртбұрыш жақшаның ішінде оның атауы тұр, ал test «келесі функцияны тест ретінде іске қос» дегенді білдіреді. assert_eq!(нақты, күтілетін) бірінші, код есептеген мәнді екінші, өзіміз болжаған мәнмен салыстырады. ! оның println! сияқты макрос екенін көрсетеді. Мәндер тең болса, тексеру өтеді; тең болмаса, екі мән көрсетіліп, тест өтпейді.
6-сабақтағы organizer жобасын ашыңыз. Cargo.toml бар бумада бұрынғы src/main.rs мазмұнын бөлек сақтап, файлды төмендегі кодпен толық ауыстырыңыз. Басқа файлдар мен тәуелділіктер өзгермейді. cargo run бағдарламаның main функциясын құрастырып іске қосады; cargo test #[test] белгісі бар функцияларды құрастырып іске қосады. Екі пәрменді де жоба бумасының терминалында орындаңыз. Төмендегі нәтиже — Cargo хабарлары емес, cargo run шығарған мәтін. Әуелі болжаңыз.
fn remaining(total: u32, done: u32) -> u32 {
total - done
}
fn main() {
println!("Қалғаны: {}", remaining(7, 2));
}
#[test]
fn subtracts_done_tasks() {
assert_eq!(remaining(7, 2), 5);
}
Қалғаны: 5
Алғашқы екі функция 14-сабақта түсіндірілген. Белгісі бар тест функциясын main өзі шақырмайды. Функциялар бір файлда болғандықтан, тест remaining функциясын шақыра алады. Тесттерді модульге топтастыруды 44-сабақтағы модульдерден кейін үйренеміз.
assert_eq! теңдік дұрыс болғанда ештеңе басып шығармайды. cargo test нәтижесінде 1 passed; 0 failed болуы тиіс; басқа жолдар Cargo нұсқасына қарай өзгеруі мүмкін. Тест қатені көрсетеді, бірақ функцияны өзі түзетпейді.
Әдейі бұзып, қалпына келтіріңіз
Күтілетін 5 санын 6 етіп өзгертіп, cargo test орындаңыз: тексеру өтпеуі керек. 5 санын қайтарыңыз. Енді total - done орнына total + done жазып, қайта тексеріңіз; содан соң азайтуды қалпына келтіріңіз. Егер тексеру бәрібір өтсе, файлды сақтағаныңызды және пәрменді жоба бумасында орындағаныңызды қараңыз. 14-сабақтағы алдын ала шарт сақталады: done <= total. Бұдан үлкен done осы функция үшін жарамсыз кіріс. Result тақырыбынан кейін қате деректі ашық өңдейміз.
Еске түсіру
Қай пәрмен main функциясын, ал қайсысы #[test] функцияларын іске қосады? Бір сәтті тест барлық u32 мәндеріне кепіл бола ма? Жауап: cargo run, кейін cargo test; жоқ.
Тапсырма
Міндетті. 14-сабақтағы ережемен is_short(minutes: u32) -> bool жазыңыз: 1–15 минут қоса алғанда. Үш тест қосыңыз: 0 → false, 15 → true, 16 → false. Алдымен нәтижелерді болжаңыз, сосын cargo test және cargo run орындаңыз. 15 үшін бағдарлама Қысқа: true шығаруы керек. Бір күтілетін мәнді әдейі қате жазып, тесттің өтпегенін көріңіз де, дұрыстаңыз. Шарт түсініксіз болса, 11-сабаққа оралыңыз.
Ишара
main функциясынан кейін аргументсіз үш бөлек функция жазыңыз; әрқайсысының алдында #[test] болсын. is_short(...) нәтижесін true не false мәнімен салыстырыңыз.
Өз талпынысыңыздан кейінгі үлгі
fn is_short(minutes: u32) -> bool {
minutes > 0 && minutes <= 15
}
fn main() {
println!("Қысқа: {}", is_short(15));
}
#[test]
fn zero_is_not_a_task() {
assert_eq!(is_short(0), false);
}
#[test]
fn fifteen_is_short() {
assert_eq!(is_short(15), true);
}
#[test]
fn sixteen_is_long() {
assert_eq!(is_short(16), false);
}
Қысқа: true
Үш шекара маңызды: тек 15 санын тексеру 0 не 16 санының қате қабылданғанын байқамас еді. Rust тесттері туралы ресми тарау.
Пікірлер (0)
Пікір қалдыру үшін кіріңіз →
Әзірге пікір жоқ. Бірінші болыңыз.