我在导入add_two.rs
中定义的公共add_two
函数时遇到了麻烦。这是我的项目结构。
Cargo.toml
src/
main.rs
add_two.rs
tests/
integration_test.rs
下面是我的main.rs文件,它定义了main函数。
//binary crate: it contains main function
pub mod add_two;
#[cfg(test)]
mod tests {
use crate::add_two::add_two;
#[test]
fn add_two_and_two(){
assert_eq!(4, add_two(2));
}
#[test]
fn add_three_and_two(){
assert_eq!(5, add_two(3));
}
#[test]
fn one_hundred(){
assert_eq!(102, add_two(100));
}
#[test]
#[ignore]
fn test_we_want_to_ignore() {
//snippet of code that takes too much processing time!
}
}
fn main() {
}
这是我的add_two.rs文件。
//library crate
pub fn add_two(a: i32) -> i32 {
a + 2
}
下面是我的integration_test.rs文件。
use crate::add_two::add_two;
#[test]
fn add_two_with_two() {
assert_eq!(add_two(2), 4);
}
这是我的货物,toml文件.
[package]
name = "tutorial1"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
1条答案
按热度按时间ikfrs5lh1#
集成测试用于测试库。它们的工作方式就好像它们是另一个包,它依赖于你的包。
您的包只有一个二进制crate,因此集成测试唯一能做的就是运行编译后的二进制文件。但是,您可以重新构造代码,以便测试能够正常工作。
首先,您需要一个
src/lib.rs
文件。这是图书馆的入口。然后,在集成测试中,通过包的名称引用库crate。
这将按预期工作,但您还应该清理
main.rs
,以便它也取决于您的库入口点。这样可以避免代码被不必要地编译两次。将测试移到
add_two.rs
中也是明智的,因为它们只与该模块相关。这也将确保在测试库时运行它们。相关内容: