Rust에서는 unit test 를 위해 #[cfg(test)] 및 #[test] 와 같은 annotation을 사용한다.
아래와 같이 tests라는 모듈에 #[cfg(test)] 를 붙여주면, 해당 모듈은 test 를 위한 모듈이라고 선언하는 것과 같은 의미.
그런데 이걸 main 함수에서 호출할 수 있을까?
main 함수에서 tests 모듈안의 open_door 함수를 호출하는 방법이 있을지 알아보았다.
#[derive(Debug)]
struct Door {
is_open: bool,
}
impl Door {
fn new(is_open: bool) -> Door {
Door { is_open }
}
}
trait Openable {
fn open(&mut self);
}
impl Openable for Door {
fn open(&mut self) {
self.is_open = true
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
pub fn open_door() {
let mut door = Door::new(false);
println!("1: {:?}", door);
door.open();
println!("2: {:?}", door);
assert!(door.is_open);
}
}
fn main() {
println!("Hello, world!");
use tests;
tests::open_door();
}
일단, cargo build 하면 아래와 같은 에러가 발생한다.
Compiling chp1 v0.1.0 (/home/ab/personal/Hands-On-Data-Structures-and-Algorithms-with-Rust/practice/chp1)
error[E0432]: unresolved import `tests`
--> practice/chp1/src/main.rs:37:9
|
37 | use tests;
| ^^^^^ no external crate `tests`
|
help: consider importing this module instead
|
37 | use core::num::bignum::tests;
| ~~~~~~~~~~~~~~~~~~~~~~~~~
For more information about this error, try `rustc --explain E0432`.
error: could not compile `chp1` due to previous error
stack overflow 에서 찾아보면, #[cfg(test)] 를 붙인 경우, test 모드로 빌드할 때 외에는 존재하지 않는 함수 가 된다고 한다.
즉, 'cargo test' 명령으로 빌드 할 경우에만 존재하는 함수가 되고,
'cargo bilud' 명령으로 빌드 할 경우에는 없는 함수가 되는 것.
따라서 Rust 컴파일러 입장에서는 main 함수에서 없는 함수를 호출하려는 잘못된 statement를 만난 것이므로,
컴파일 에러 error[E0432]: unresolved import `tests` 를 발생시킨 것이다.
굳이 main에서 이 함수를 호출하고 싶다면,
#[cfg(test)] 와 #[test]를 제거하고 cargo build 로 빌드하면 된다.
제거하지 않고 하기를 원하면 cargo test 로 빌드하면 된다.
참조 : https://stackoverflow.com/questions/75270174/how-can-i-call-test-function-in-the-body-of-main
'개발자의 기록 노트' 카테고리의 다른 글
ChatGPT : 거짓 정보를 그럴듯하게 포장해내는 인공지능 (0) | 2023.05.13 |
---|---|
USB 규격 마스터링 (0) | 2023.05.07 |
[Rust] 윈도우 환경에서 컴파일 실패 : linker link.exe not found (0) | 2023.04.05 |
[Rust] 시작하기 - 개발 환경 만들기 (0) | 2023.03.26 |
Notepad++ Plugin : NPP Export Plugin (0) | 2017.02.15 |
[Mac OS] 맥의 OS X에서 readelf와 같은 binary utility 사용하기 (0) | 2016.04.04 |