gpt4 book ai didi

testing - 如何使用内联文档进行 rust 测试

转载 作者:行者123 更新时间:2023-12-03 11:36:41 24 4
gpt4 key购买 nike

我正在尝试获取 rust 以测试我的内联文档中的示例。我写了以下代码:

#[derive(Clone)]
#[derive(PartialEq)]
#[derive(Debug)]
enum Color {
Black = 1,
Empty = 0,
White = -1
}
/// Chages Color to the next player
///
/// Returns: White if player is Black, Black if player is White and Empty if
/// player is Empty.
///
/// Examlple
/// ```
/// assert_eq!(flip(&Color::White),Color::Black);
///```

// Invariant Color must represent Black as 1, Empty as 0 and White as -1!
fn flip(player: &Color)->Color{
let intrepresentation :i8 = (player.clone() as i8) * (-1);
unsafe{
std::mem::transmute(intrepresentation)
}
}
fn main() {
assert_eq!(flip(&Color::White),Color::Black);
}

然后我跑

rustdoc --test src/main.rs 

这给了我:

running 1 test
test src/main.rs - flip (line 16) ... FAILED

failures:

---- src/main.rs - flip (line 16) stdout ----
error[E0433]: failed to resolve: use of undeclared type or module `Color`
--> src/main.rs:17:18
|
3 | assert_eq!(flip(&Color::White),Color::Black);
| ^^^^^ use of undeclared type or module `Color`

error[E0433]: failed to resolve: use of undeclared type or module `Color`
--> src/main.rs:17:32
|
3 | assert_eq!(flip(&Color::White),Color::Black);
| ^^^^^ use of undeclared type or module `Color`

error[E0425]: cannot find function `flip` in this scope
--> src/main.rs:17:12
|
3 | assert_eq!(flip(&Color::White),Color::Black);
| ^^^^ not found in this scope

error: aborting due to 3 previous errors

Some errors have detailed explanations: E0425, E0433.
For more information about an error, try `rustc --explain E0425`.
Couldn't compile the test.

failures:
src/main.rs - flip (line 16)

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

我怎样才能让 rustc 找到翻转和颜色。测试在 main 函数中运行良好。我也试过命令:

cargo test

但这并没有运行任何测试。

我尝试在示例中添加以下行:

   /// use crate::{flip, Color};

制作:

// Chages Color to the next player
///
/// Returns: White if player is Black, Black if player is White and Empty if
/// player is Empty.
///
/// Examlple
/// ```
/// use crate::{flip, Color};
/// assert_eq!(flip(&Color::White),Color::Black);
///```

但这会报错

martin@martin-laptop:~/test_code$ rustdoc --test src/main.rs 

running 1 test
test src/main.rs - main (line 23) ... FAILED

failures:

---- src/main.rs - main (line 23) stdout ----
error[E0432]: unresolved import `crate::Color`
--> src/main.rs:24:14
|
3 | use crate::{ Color};
| ^^^^^ no `Color` in the root

error[E0425]: cannot find function `flip` in this scope
--> src/main.rs:25:12
|
4 | assert_eq!(flip(&Color::White),Color::Black);
| ^^^^ not found in this scope

error: aborting due to 2 previous errors

Some errors have detailed explanations: E0425, E0432.
For more information about an error, try `rustc --explain E0425`.
Couldn't compile the test.

failures:
src/main.rs - main (line 23)

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

我也尝试过公开颜色和翻转:

#[derive(Clone)]
#[derive(PartialEq)]
#[derive(Debug)]
pub enum Color {
Black = 1,
Empty = 0,
White = -1
}

/// Chages Color to the next player
///
/// Returns: White if player is Black, Black if player is White and Empty if
/// player is Empty.
///
/// Examlple
/// ```
/// use crate::{flip, Color};
/// use std::env;
/// assert_eq!(flip(&Color::White),Color::Black);
///```

// Invariant Color must represent Black as 1, Empty as 0 and White as -1!

pub fn flip(player: &Color)->Color{
let intrepresentation :i8 = (player.clone() as i8) * (-1);
unsafe{
std::mem::transmute(intrepresentation)
}
}
fn main() {
assert_eq!(flip(&Color::White),Color::Black);
}

但这给出了同样的错误。

最佳答案

文档测试(///``` 中的测试)单独编译作为它们自己的小程序。因此:

  • 他们只能访问公共(public)项目:pub mod, pub fn, pub struct, ...
  • 他们只能访问 library crate 导出项目以供其他 crate 使用 - 如果您的程序在 main.rs 中,那么它就是一个 binary crate
  • 您必须完全限定或使用名称,例如use my_library::Color;

如果你想测试不适合这个的东西,那么你应该使用 #[test] 测试来代替:

#[test]
fn flip_test() {
assert_eq!(flip(&Color::White), Color::Black);
}

位于程序中任何位置且具有 #[test] 属性的任何函数都将作为测试运行。因此,他们可以访问私有(private)项目,因为它们位于同一个模块(或子模块)中;通常将它们放在同一个文件中名为 tests 的模块中,使用 mod tests { 。 .. })。

您可以在 The Rust Programming Language: How to Write Tests 找到有关如何编写测试函数和组织测试的更多信息。 .


I have also tried to Color and flip as public:

/// use crate::{flip, Color};

这不起作用,因为 crate 指的是当前 crate,对于 doc 测试来说,它是 测试程序,而不是您的主 crate。

关于testing - 如何使用内联文档进行 rust 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64797353/

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