본문 바로가기

Languages/Rust

rust 에서 library, unit test 분리하기

Image Credit: rust-lang.org

rust에서 library를 분리하고 library code를 테스트하는 unit test를 분리하는 방법을 소개합니다.

node.js나 java들과 크게 다르진 않는데, 초반에 셋업할 때 구조를 이해하지 못하면 한참 해맬수가 있어서 공유합니다 아래와 같은 간단한 절차로 진행하면 구조를 이해하는 데 도움이 될 겁니다.

 

먼저 app를 생성합니다.

cargo new my_app

 

app에서 사용한 library를 생성합니다.

cd my_app
cargo new --lib my_lib

 

library의 unit test 코드를 my_lib/src/lib.rs안에 작성합니다.

pub fn add(a: i32, b: i32) -> i32 {
    a + b
}

 

그리고, 예제로 들어 있던 test code를 my_lib/tests/lib_test.rs 에 다음과 같이 입력한다

#[cfg(test)]
mod lib_test {
    #[test]
    fn test_add() {
        assert_eq!(my_lib::add(2, 2), 4);
    }
}

 

이제 library를 사용하는 application code(src/main.rs)를 아래와 같이 수정합니다..

use my_lib;

fn main() {
    println!("Hello, world!");
    println!("2+2={:?}", my_lib::add(2, 2));
}

application에 library 의존성을 추가하기 위해 Cargo.toml 파일을 수정합니다.

[dependencies]
my_lib = { path = "my_lib" }

 

이제 test를 실행합니다.

cargo test --package my_lib --test lib_test -- lib_test

 

아래와 같이 출력되면 library code와 test 작성 성공입니다.

➞  cargo test --package my_lib --test lib_test -- lib_test                                                            [git:main] ✖  
   Compiling my_lib v0.1.0 (/Users/jinwoomin/git/sandbox/rust/youtube/my_app/my_lib)
    Finished test [unoptimized + debuginfo] target(s) in 0.28s
     Running tests/lib_test.rs (target/debug/deps/lib_test-4318a73c03728bad)

running 1 test
test lib_test::test_add ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

 

 

지금까지 한 것을 동영상으로도 확인해보세요.

https://youtu.be/GiMsOiXbXdM