통합 테스트
유닛 테스트는 한 번에 하나의 모듈을 격리하여 테스트합니다. 유닛 테스트는 크기가 작고 프라이빗 코드도 테스트할 수 있습니다. 통합 테스트는 크레이트 외부에 존재하며, 다른 코드와 마찬가지로 공개(public) 인터페이스만 사용합니다. 통합 테스트의 목적은 라이브러리의 여러 부분이 함께 올바르게 작동하는지 테스트하는 것입니다.
Cargo는 src 옆의 tests 디렉터리에서 통합 테스트를 찾습니다.
src/lib.rs 파일:
// `adder`라는 이름의 크레이트에 이를 정의합니다.
pub fn add(a: i32, b: i32) -> i32 {
a + b
}
테스트 파일: tests/integration_test.rs:
#[test]
fn test_add() {
assert_eq!(adder::add(3, 2), 5);
}
cargo test 명령으로 테스트 실행하기:
$ cargo test
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
Running target/debug/deps/integration_test-bcd60824f5fbfe19
running 1 test
test test_add ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
Doc-tests adder
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
통합 테스트 간에 일부 코드를 공유하기 위해 공개 함수가 있는 모듈을 만들고, 이를 테스트 내에서 가져와 사용할 수 있습니다.
tests/common/mod.rs 파일:
pub fn setup() {
// 필요한 파일/디렉터리 생성, 서버 시작 등과 같은 일부 설정 코드
}
테스트 파일: tests/integration_test.rs
// common 모듈 가져오기.
mod common;
#[test]
fn test_add() {
// 공통 코드 사용하기.
common::setup();
assert_eq!(adder::add(3, 2), 5);
}
tests/common.rs로 모듈을 만드는 것도 가능하지만, 테스트 러너가 이 파일을 테스트 크레이트로 취급하여 내부의 테스트를 실행하려 하므로 권장되지 않습니다.