我想制作一个包含可重用库(实现大部分程序)的Rust包,以及使用它的可执行文件.
假设我没有混淆Rust模块系统中的任何语义,我的Cargo.toml文件应该是什么样的?
正如The Book所建议的那样,我已将板条箱中的集成测试移动到一个tests目录中。但是,其中一些测试使用了我不想导出到 crate 之外的函数,而且我无法再在集成测试文件夹中使用它们。我也将它们用于非测试目的,因此它们也需要在测试之外进行编译。我尝试使用 的变体pub(restricted),但无法使其工作。理想情况下,我想要像pub(tests).
目录树(相关位):
my_crate
|- src
|- parser.rs
|- tests
|- parsing.rs
|- benches
|- parsing.rs
Run Code Online (Sandbox Code Playgroud)
测试/解析.rs:
extern crate my_crate;
use my_crate::parser::foo;
#[test]
fn temp() {
foo();
}
Run Code Online (Sandbox Code Playgroud)
长凳/解析.rs:
#![feature(test)]
extern crate test;
extern crate my_crate;
use test::Bencher;
use my_crate::parser::foo;
#[bench]
fn temp(b: &mut Bencher) {
b.iter(|| { foo(); });
}
Run Code Online (Sandbox Code Playgroud)
我目前的解决方法是pub在文档 ( #[doc(hidden)])中使相关对象保持可见和不可见,但这并没有传达正确的意图。我可以仅出于集成测试/基准测试的目的公开对象吗?
我有Rust项目,包括集成测试(在/testsdir中)和基准测试(在/benchesdir中).在测试和长凳中我需要一些实用功能,但它们与我的箱子本身无关,所以我不能把它们放在/utils目录中.
处理这种情况的惯用方法是什么?
我正在尝试在Rust中配置一个示例项目.
我的结构是:
src/potter.rstests/tests.rs和我的 Cargo.toml
[package]
name = "potter"
version = "0.1.0"
authors = ["my name"]
[dependencies]
Run Code Online (Sandbox Code Playgroud)
我的potter.rs包含:
pub mod potter {
pub struct Potter {
}
impl Potter {
pub fn new() -> Potter {
return Potter {};
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的tests.rs包含:
use potter::Potter;
#[test]
fn it_works() {
let pot = potter::Potter::new();
assert_eq!(2 + 2, 4);
}
Run Code Online (Sandbox Code Playgroud)
但我收到这个错误:
error[E0432]: unresolved import `potter`
--> tests/tests.rs:1:5
|
1 | use potter::Potter;
| ^^^^^^ Maybe a missing …Run Code Online (Sandbox Code Playgroud) 我在学习如何访问模块时陷入困境。我正在尝试插入除 之外的文件src夹src。它不起作用并且给了我一个错误。这是我的项目树。
$ Project1
.
|-- src
| |-- main.rs
| |--FolderinSrcFolder
| |--folderinsrcmodule.rs
|
|--anothersrc
| |--mod.rs
|
|-- rootmodule.rs
|-- Cargo.toml
|-- Cargo.lock
Run Code Online (Sandbox Code Playgroud)
我怎样才能访问anothersrc/mod.rs src/main.rs?我如何rootmodule.rs访问src/main.rs?
我已经阅读了 Rust 文档。