0Pricing
Learn Rust Coding · 강의

단위 테스트

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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 단위 테스트
  2. 통합 테스트
  3. 문서 주석
  4. 문서 테스트
← Learn Rust Coding(으)로 돌아가기