当前位置: 首页 > 知识库问答 >
问题:

如何在二进制项目中使用src文件夹外部的模块,例如用于集成测试或基准测试?

苏涵润
2023-03-14

我的项目路径结构如下:

demo
├── benches
│   └── crypto_bench.rs
├── src
│   ├── main.rs
│   └── crypto.rs
├── Cargo.lock
└── Cargo.toml

加密。rs包含一个带实现的结构Crypto<密码>加密。rs是从main中引用的。rs使用mod crypto

我如何使用crypto.rscrypto_bench.rs内的长凳文件夹?

我试过各种各样的extern-cratermodsuperuse。我可以在网上找到的所有例子都是关于带有lib的库项目。rs和那些“导入”在使用带有main的项目时不起作用。rs文件。


共有1个答案

拓拔泉
2023-03-14

这里有一个字面上的答案,但实际上不要使用这个!

#![feature(test)]
extern crate test;

#[path = "../src/foo.rs"] // Here
mod foo;

#[bench]
fn bencher(_: &mut test::Bencher) {
    println!("{:?}", foo::Thang);
}

事实上,这很可能不起作用,因为您的代码在foo中。rs需要来自其他文件的支持代码,这些文件将不包括在内。

与其这样做,不如创建一个库。您有一个库的纯定义—一段代码,它希望在两个不同的可html" target="_blank">执行文件中使用。你不必放弃拥有一个可执行文件,甚至不必创建单独的目录(参见Rust package with a library and binary?),但是,创建可重用代码是制作好代码的关键组成部分。

你的最终状态看起来像:

demo
├── Cargo.lock
├── Cargo.toml
├── benches
│   └── crypto_bench.rs
├── benchmarks
└── src
    ├── bin
    │   └── main.rs
    ├── crypto.rs
    └── lib.rs

将可重用代码移动到库中:

src/lib。rs

pub mod crypto;

src/crypto。rs

pub struct Crypto;
impl Crypto {
    pub fn secret() {}
}

然后从基准和二进制文件导入库:

工作台/加密工作台。rs

#![feature(test)]

extern crate test;

use demo::crypto::Crypto;
use test::Bencher;

#[bench]
fn speedy(b: &mut Bencher) {
    b.iter(|| Crypto::secret());
}

src/bin/main.rs

use demo::crypto::Crypto;

fn main() {
    Crypto::secret();
    eprintln!("Did the secret thing!");
}

然后,您可以用不同的方式运行它:

$ cargo build
   Compiling demo v0.1.0 (/private/tmp/example)
    Finished dev [unoptimized + debuginfo] target(s) in 0.51s

$ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.01s
     Running `target/debug/main`
Did the secret thing!

$ cargo +nightly bench
   Compiling demo v0.1.0 (/private/tmp/example)
    Finished release [optimized] target(s) in 0.70s
     Running target/release/deps/my_benchmark-5c9c5716763252a0

running 1 test
test speedy ... bench:           1 ns/iter (+/- 0)

test result: ok. 0 passed; 0 failed; 0 ignored; 1 measured; 0 filtered out

另见:

  • 带库和二进制文件的Rust包
 类似资料:
  • 我有一个多模块的弹簧引导项目。我想知道如何设置集成测试来测试Spring数据JPA存储库?以下方法失败,但有此异常:HV000183:无法加载'javax.el.ExpressionFactory'。检查是否在类路径上有EL依赖项。 由于该模块不依赖于web模块,因此没有可以启动的web应用程序。

  • 如果jar项目不包含启动程序,我如何测试它们? 示例JUnit测试用例头:

  • 背景:我想根据模式自动验证XML文件。为此,我在中创建了一个maven-project和一个-class。 为了运行测试,我在中创建了。我的想法是将XML和XSD文件(我想要验证)放入文件夹,并按文件名“抓取”它们。但是当我运行时,找不到文件。 我的测试类: 当我运行时,我得到了一个文件找不到的异常,例如-它在资源文件夹中。 我尝试了Maven(surefire)的解决方案:通过-标记复制文件,从

  • 问题内容: 我有一个要测试使用的应用程序,但是有一些问题。我的目录结构如下: 我想测试中的和模块,然后尝试做 但是在我不能导入我的目录包。 我该如何工作? 基本上,我想从测试的应用程序与和单独的目录。 我尝试将追加到,但是当我从导入时,我仍然从unittest得到一个。 编辑:我的导入和声明是: 和回溯: 问题答案: 要做的一件非常错误的事情是在上附加一个相对路径。如果要确定路径,请进行以下操作:

  • 我有一个Django应用程序,其视图接受要上传的文件。使用Django REST框架,我对APIView进行子类化并实现post()方法,如下所示: 现在,我正在尝试编写几个单元测试,以确保需要身份验证,并实际处理上传的文件。 但是当REST框架试图编码请求时,这将失败 如何让测试客户端发送数据而不尝试将其解码为UTF-8?

  • 我正在我的querying-api模块中编写测试用例来测试我的API,并且我希望在测试开始用预定义的测试数据加载数据库之前运行我的数据库加载器服务,同时测试加载器是否仍然工作。但是,在运行时出现以下错误: 测试引用公共域定义库没有问题... 父POM文件: 数据库加载程序POM文件:

  • 我正在GitHub上创建一个模块化的构建(使用module-info.java),但是在我想要模块化的模块中添加一个module-info.java时,无法执行任何测试... 我怎样才能做到这一点呢? 我正在使用以下版本: junit.jupiter版本5.3.0(第一次使用版本5.2.0也不成功) maven-compiler-plugin版本3.8.0(第一次使用版本3.7.0也不成功) ma

  • 我希望通过在所有模块构建和单元测试完成后从所有模块运行集成测试来加快对“简单”构建失败(编译错误和单元测试失败)的反馈。 你能提出一个实现这一点的好方法吗?