단위 테스트
test 어트리뷰트
단위 테스트은(는) CoddyKit의 무료 Learn Rust Coding 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Learn Rust Coding 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Learn Rust Coding 강의에는 총 4개의 강의가 포함되어 있습니다.
Rust에서 테스트하기
Rust에는 테스트 기능이 내장되어 있어 외부 프레임워크가 필요하지 않습니다. 테스트는 #[test]가 지정된 일반 함수이며, cargo test로 실행합니다.
첫 테스트
테스트 함수는 인수를 받지 않고 어설션을 사용합니다. 정상적으로 반환되면 통과하고, 패닉이 발생하면 실패합니다.
fn add(a: i32, b: i32) -> i32 {
a + b
}
#[test]
fn it_adds() {
assert_eq!(add(2, 3), 5);
}
fn main() {
println!("{}", add(2, 3));
}어설션 매크로
표준 어설션은 다음과 같습니다:
assert!(cond)— 조건이 거짓이면 실패assert_eq!(a, b)— 같지 않으면 실패assert_ne!(a, b)— 같으면 실패
fn main() {
let x = 4;
assert!(x > 0);
assert_eq!(x, 4);
assert_ne!(x, 5);
println!("All assertions passed");
}tests 모듈
일반적으로 단위 테스트는 #[cfg(test)]가 지정된 모듈에 작성하여 테스트할 때만 컴파일되도록 합니다.
fn square(n: i32) -> i32 {
n * n
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn squares_correctly() {
assert_eq!(square(5), 25);
}
}
fn main() {
println!("{}", square(5));
}use super::*
테스트 모듈은 중첩되어 있으므로 use super::*를 사용하면 부모 모듈의 항목, 즉 테스트하려는 함수를 현재 범위로 가져올 수 있습니다.
테스트 실행하기
cargo test는 모든 테스트를 컴파일하고 실행합니다. 통과, 실패 또는 무시된 테스트의 개수를 보고합니다.
cargo test패닉 테스트하기
#[should_panic]을 사용하면 특정 조건에서 함수가 패닉을 일으키는지 확인할 수 있습니다.
fn checked_div(a: i32, b: i32) -> i32 {
if b == 0 {
panic!("division by zero");
}
a / b
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
#[should_panic(expected = "division by zero")]
fn panics_on_zero() {
checked_div(10, 0);
}
}
fn main() {}Result를 반환하는 테스트
테스트는 Result를 반환할 수 있으므로 ? 연산자를 사용할 수 있습니다. Err를 반환하면 테스트가 실패합니다.
fn parse(s: &str) -> Result<i32, std::num::ParseIntError> {
s.parse::<i32>()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn parses_number() -> Result<(), std::num::ParseIntError> {
let n = parse("42")?;
assert_eq!(n, 42);
Ok(())
}
}
fn main() {}테스트 무시하기
느리거나 환경에 따라 달라지는 테스트에는 #[ignore]를 지정합니다. cargo test -- --ignored로 해당 테스트를 명시적으로 실행할 수 있습니다.
#[test]
#[ignore]
fn expensive_test() {
// long-running work
}
fn main() {}유용한 테스트 플래그
테스트를 실행할 때 유용한 옵션:
cargo test name— 이름이 일치하는 테스트 실행cargo test -- --nocapture— println 출력 표시cargo test -- --test-threads=1— 순차적으로 실행
비공개 함수 테스트하기
테스트 모듈은 같은 파일 안에 중첩되어 있으므로 비공개 함수에 접근할 수 있습니다. 통합 테스트에서는 불가능한 기능입니다. 이것이 단위 테스트의 중요한 장점입니다.
fn internal(n: i32) -> i32 {
n + 1
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn tests_private() {
assert_eq!(internal(4), 5);
}
}
fn main() {
println!("{}", internal(4));
}빠른 확인
Cargo가 실행해야 할 테스트로 함수를 표시하는 특성은 무엇인가요?
복습
Rust의 내장 테스트에 대해 배운 내용:
#[test]는 테스트 함수를 표시합니다- 어설션:
assert!,assert_eq!,assert_ne! - 테스트는
use super::*를 사용하는#[cfg(test)]모듈에 작성합니다 #[should_panic]와Result를 반환하는 테스트로 오류를 처리합니다cargo test가 모든 항목을 실행합니다
자주 묻는 질문
“단위 테스트” 강의는 무료인가요?
네 — “단위 테스트” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Learn Rust Coding 강의 전체를 잠금 해제할 수 있습니다. Learn Rust Coding 강의에는 총 4개의 강의가 포함되어 있습니다.
“단위 테스트”에서 뭘 배우나요?
test 어트리뷰트 브라우저에서 직접 실행하는 실습 코드로 Learn Rust Coding을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Learn Rust Coding을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Learn Rust Coding은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“단위 테스트” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Learn Rust Coding 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Learn Rust Coding 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.