如何在 Rust 中构建文件?

问题描述 投票:0回答:1

为了学习经验,我想开始一个新的 Rust 项目并逐步向上。到目前为止的主要困难是,每当我尝试将文件保留在某种结构中时,我都会遇到一些问题。

对于这个项目,文件结构是:

rwarden/
|- src/
|   |- main.rs
|   |- utils/
|       |- secure.rs
|- tests/
|   |- utils/
|       |- secure_test.rs
|- Cargo.toml

cargo.toml内容可以在下面找到

[package]
name = "rwarden"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
rust-crypto = "0.2.36"

# chatgpt suggestion, not working
#[[test]]
#name = "secure_test"
#path = "tests/utils/secure_test.rs"

secure.rs 文件包含一个计算给定字符串的 sha256 的函数,并且可以在下面找到 secure_test.rs 代码

//secure.rs
use crypto::digest::Digest;
use crypto::sha2::Sha256;

pub fn calculate_sha256_hash(input: &str) -> String {
    let mut sha = Sha256::new();
    sha.input_str(input);

    sha.result_str()
}

//secure_test.rs
#[cfg(test)]
mod tests {
    use rwarden::utils::secure::calculate_sha256_hash;

    #[test]
    fn test_calculate_sha256_hash() {
        let input = "Hello, world!";
        let expected_hash = "94ee059335e587e501cc4bf90613e081a6e1e7babc11c8cfae0c557a99a063ff".to_string();

        let hash = calculate_sha256_hash(input);

        assert_eq!(hash, expected_hash);
    }
}

//main.rs
mod utils {
    pub mod secure;
}

fn main() {
    let input = "Hello, world!";
    let hash = utils::secure::calculate_sha256_hash(input);

    println!("Input: {}", input);
    println!("SHA-256 hash: {}", hash);
}

这会导致在尝试运行测试时出现“使用未声明的板条箱或模块

rwarden
”错误。主要问题是如何使
calculate_sha256_hash
函数对测试可见?而且似乎这样每个新的测试都必须添加到 Cargo.toml 文件中,这似乎也不是最好的选择,还有其他方法吗?

rust rust-cargo
1个回答
0
投票

您不能在二进制包上使用集成测试。您的选择是:

  • 将板条箱设为库并从二进制文件和测试中使用它。请注意,您还需要将
    utils
    模块公开。
  • 改用单元测试(在同一文件中)。
© www.soinside.com 2019 - 2024. All rights reserved.