gpt4 book ai didi

unit-testing - 如何制作测试目录?

转载 作者:行者123 更新时间:2023-11-29 07:47:56 24 4
gpt4 key购买 nike

我想建立一个基本的 hello world 项目。单元测试应位于 test/ 目录中,如 the book 中所述。 .到目前为止,我的代码如下。

src/main.rs

pub mod player;

fn main() {
println!("Hello, world!");
}

src/player.rs

pub fn rep(arg: i32) -> i32 {
arg
}

tests/player.rs

extern crate player;

#[test]
fn it_works() {
assert_eq!(4, player::rep(2+2));
}

Cargo.toml

[package]
name = "myapp"
version = "0.1.0"
authors = ["My Name <spam@example.com>"]

我相信代码与书中非常相似。但是,cargo test 失败了:

tests/player.rs:1:1: 1:21 error: can't find crate for `player`
tests/player.rs:1 extern crate player;
^~~~~~~~~~~~~~~~~~~~
error: aborting due to previous error

问题是什么?我完全迷路了。

最佳答案

有两个问题。首先,您正在构建一个可执行文件,而不是一个库,因此您无法链接到结果来测试它。其次,您似乎对模块和 crate 之间的区别感到困惑。您可能想阅读 Crates and Modules chapter of the Rust book .

如果您希望您的 crate 中的类型和方法可以从外部访问,您需要将您的代码编译到一个库中。通常,Rust 中的可执行文件只是同名库的薄包装。所以,你可能有:

// src/main.rs
extern crate player;

fn main() {
println!("rep(42): {:?}", player::rep(42));
}

// src/lib.rs
pub fn rep(arg: i32) -> i32 { arg }

这将允许您测试 player::rep

您可以做的另一件事就是在要测试的代码旁边编写测试。

// src/lib.rs
pub fn rep(arg: i32) -> i32 { arg }

#[test]
fn test_rep() { assert_eq!(rep(4), 4); }

关于unit-testing - 如何制作测试目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31759389/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com