작성한 "tests"디렉토리에서 내 보낸 라이브러리 함수에 어떻게 액세스합니까?상자의 "tests"디렉토리에서 내 보낸 함수에 어떻게 액세스합니까?
SRC/relations.rs :
#![crate_type = "lib"]
mod relations {
pub fn foo() {
println!("foo");
}
}
테스트/test.rs :
use relations::foo;
#[test]
fn first() {
foo();
}
$ cargo test
Compiling relations v0.0.1 (file:///home/chris/github/relations)
/home/chris/github/relations/tests/test.rs:1:5: 1:14 error: unresolved import `relations::foo`. Maybe a missing `extern crate relations`?
/home/chris/github/relations/tests/test.rs:1 use relations::foo;
^~~~~~~~~
나는 extern crate relations
제안 추가하는 경우이 오류는 다음과 같습니다
/home/chris/github/relations/tests/test.rs:2:5: 2:19 error: unresolved import `relations::foo`. There is no `foo` in `relations`
/home/chris/github/relations/tests/test.rs:2 use relations::foo;
^~~~~~~~~~~~~~
테스트하고 싶습니다. relations
이 별도의 tests/test.rs
파일. 이 use
문제를 어떻게 해결할 수 있습니까?
이 답변이 하나 개 더 수준을하게
그리고
src/lib.rs
파일이 포함 네임 스페이스는 필요한 것보다 중첩되지만 매우 명확하고 유용합니다. 상자 모듈은 그 자체로 적절한 모듈입니까? 또는 상자와 모듈은 네 가지 형태의 네임 스페이스입니까? – fadedbee@chrisdew, 예, 상자 및 모듈이 다릅니다. 상자는 모듈로 구성됩니다. 각 상자에는 "crate root"라는 이름이없는 이름의 최상위 모듈이 있습니다.이 모듈은 최상위 파일에있는 모든 정의로 구성되며,이 경우에는 lib.rs입니다. 'pub mod relation'과 그 대응 괄호를 제거하고'fn foo()'를 최상위 레벨로 남겨두면 테스트에서'use relations :: relations'에 두 번째'관계'가 필요하지 않습니다. 왜냐하면'fn foo())'는 나무 상자 뿌리에서 살 것입니다. –
크레이트는 컴파일 단위이며 모듈은 코드를 구조화하기위한 논리 단위입니다. 이것이 예를 들어 동일한 크레이트에서 모듈간에 상호 종속성을 가질 수 있지만 크레이트간에 상호 종속성을 가질 수없는 이유입니다. –