comnic's Dev&Life

[Rust] 12. 테스트와 에러 핸들링 본문

Rust

[Rust] 12. 테스트와 에러 핸들링

comnic 2023. 12. 9. 17:23
반응형

12. 테스트와 에러 핸들링

Rust는 테스트 주도 개발(Test-Driven Development, TDD)을 지원하며, 코드의 안정성과 신뢰성을 확인하는 데에 사용됩니다.

12.1 테스트 작성과 실행

테스트는 #[test] 어트리뷰트를 사용하여 작성되며, cargo test 명령어를 통해 실행됩니다.

// 소스 코드
fn add(a: i32, b: i32) -> i32 {
    a + b
}

// 테스트 코드
#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_add() {
        assert_eq!(add(2, 3), 5);
        assert_eq!(add(-1, 1), 0);
        assert_eq!(add(0, 0), 0);
    }
}
  • add 함수는 간단한 덧셈을 수행하는 함수입니다.
  • #[cfg(test)]: 테스트 모듈을 정의하기 위한 어트리뷰트로, 테스트가 아닌 경우에는 이 모듈이 컴파일되지 않습니다.
  • #[test]: 테스트 함수를 정의하기 위한 어트리뷰트로, 테스트 코드를 작성할 때 사용됩니다.
  • assert_eq!: 주어진 값이 예상 값과 같은지를 확인하는 매크로로, 값이 다르면 테스트가 실패합니다.

 

11.2 Result와 Option 타입을 이용한 에러 핸들링

 Rust에서는 함수의 성공 또는 실패를 나타내기 위해 Result와 Option이라는 열거형 타입을 사용합니다. Result는 에러의 원인을 포함하며, Option은 성공 또는 실패만을 표현합니다. 이를 통해 명시적인 에러 핸들링이 가능합니다.

// Result를 이용한 에러 핸들링
fn divide(a: f64, b: f64) -> Result<f64, &'static str> {
    if b == 0.0 {
        Err("Cannot divide by zero.")
    } else {
        Ok(a / b)
    }
}

// Option을 이용한 에러 핸들링
fn get_first_element<T>(vec: Vec<T>) -> Option<T> {
    if vec.is_empty() {
        None
    } else {
        Some(vec[0])
    }
}
  • Result<f64, &'static str>: Result 열거형은 성공일 경우 Ok 안에 성공 값이, 실패일 경우 Err 안에 실패 원인이 담겨있습니다.
  • Option<T>: Option 열거형은 성공일 경우 Some 안에 값이, 실패일 경우 None이 담겨있습니다.
  • Err("Cannot divide by zero."): 에러 발생 시 실패 원인을 나타내는 문자열을 담아 Result의 Err 값을 생성합니다.
  • Some(vec[0]): 벡터의 첫 번째 요소를 Option의 Some 값으로 반환합니다.

이러한 에러 핸들링은 코드 안정성을 높이고, 예상치 못한 상황에 대비하여 안전하고 신뢰성 있는 프로그램을 작성하는 데에 도움이 될 것입니다.

반응형
Comments