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
지금까지 한 것을 동영상으로도 확인해보세요.