【作业打卡】Week4. 模块四:Rust 项目基础 #28
Replies: 11 comments
-
你认为的错误处理逻辑应该是怎样的?按照情况分为如下五种:
以一个工作空间的形式创建一个项目,并在其下创建多个模块,并把它们关联起来,使之能够正常编译运行关键还是toml 文件 [package]
name = "app"
version = "0.1.0"
edition = "2021"
[workspace]
members = ["mybase","mylib"]
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
mylib = {path="./mylib"} 尝试编写单元测试和集成测试
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}
在 Rust 中,crate 关键字只能在库(lib)包的根模块中使用,它用于引用当前包的内容。而在 tests 目录中,测试文件是作为独立的模块执行的,无法直接访问 crate 关键字。 如果你需要强行测试,可以使用文件路径指定module #[path = "../src/myinfo.rs"]
mod myinfo; |
Beta Was this translation helpful? Give feedback.
-
你认为的错误处理逻辑应该是怎样的?良好的错误处理逻辑的通用准则:
Rust处理错误的一些方式:
以一个工作空间的形式创建一个项目,并在其下创建多个模块,并把它们关联起来,使之能够正常编译运行尝试编写单元测试和集成测试单元测试是在源代码文件中与被测试的代码一起编写的,并使用 // src/lib.rs
pub fn add(a: i32, b: i32) -> i32 {
a + b
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_add() {
assert_eq!(add(2, 3), 5);
assert_eq!(add(-1, 1), 0);
assert_eq!(add(10, -5), 5);
}
} 在这个示例中, 同一个模块内使用 用
// tests/integration_tests.rs
use my_library::add;
#[test]
fn test_add() {
assert_eq!(add(2, 3), 5);
assert_eq!(add(-1, 1), 0);
assert_eq!(add(10, -5), 5);
} 集成测试
一个简单的集成测试: // tests/integration_tests.rs
#[test]
fn test_addition() {
assert_eq!(2 + 2, 4);
}
#[test]
fn test_subtraction() {
assert_eq!(5 - 2, 3);
} |
Beta Was this translation helpful? Give feedback.
-
1. 你认为的错误处理逻辑应该是怎样的?
let result: Result<i32, i32> = Ok(1) // Err(404);
match result {
Ok(value) => {
match value {
1 => {
println!("成功返回值1");
},
2 => {
println!("成功返回值1");
},
_ => {
println!("成功默认处理方法");
},
}
},
Err(error) => {
match error {
404 => {
println!("Not Found");
},
_ => {
eprintln!("Error {}", error);
}
}
}
}
use std::panic;
fn main() {
restart();
}
fn restart() {
let result = panic::catch_unwind(|| {
// 执行可能引发panic的代码
println!("This will be printed before panic");
panic!("Something went wrong");
});
match result {
Ok(_) => {
// panic未发生,继续执行
println!("The program survived panic");
},
Err(_) => {
// panic发生,重新启动程序
println!("The program panicked, restarting...");
restart();
},
}
} 以一个工作空间的形式创建一个项目,并在其下创建多个模块,并把它们关联起来,使之能够正常编译运行https://github.com/lx7575000/rust-project-demo/tree/main
// 根据实际情况选择是否声明pub来支持外部调用
pub mod lib2_cell;
pub mod lib2_universe; 3. 尝试编写单元测试和集成测试
|
Beta Was this translation helpful? Give feedback.
-
1.你认为的错误处理逻辑应该是怎样的?
2.以一个工作空间的形式创建一个项目,并在其下创建多个模块,并把它们关联起来,使之能够正常编译运行https://github.com/sjinzh/rust_learn_tintin 3.尝试编写单元测试和集成测试1)单元测试目标是测试某一个代码单元(一般都是函数),验证该单元是否能按照预期进行工作。单元测试的惯例是将测试代码的模块跟待测试的正常代码放入同一个文件中,并使用 // add_pkg/src/lib.rs
pub fn add_four(a: i32) -> i32 {
a + 4
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_add_four() {
assert_eq!(add_four(2), 6);
assert_eq!(add_four(-2), 2);
}
} 2)集成测试的代码是在一个单独的目录下的,对某一个功能或者接口进行测试。rust默认的集成测试文件夹 // add_pkg/tests/integration_test.rs
use add_pkg::add_four;
#[test]
fn integration_test_add_four() {
assert_eq!(add_four(2), 6);
assert_eq!(add_four(-2), 2);
} |
Beta Was this translation helpful? Give feedback.
-
1. 你认为的错误处理逻辑应该是怎样的? 2. 以一个工作空间的形式创建一个项目,并在其下创建多个模块,并把它们关联起来,使之能够正常编译运行 3. 尝试编写单元测试和集成测试
|
Beta Was this translation helpful? Give feedback.
-
1、你认为的错误处理逻辑应该是怎样的? 2、以一个工作空间的形式创建一个项目,并在其下创建多个模块,并把它们关联起来,使之能够正常编译运行 |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
你认为的错误处理逻辑应该是怎样的?
以一个工作空间的形式创建一个项目,并在其下创建多个模块,并把它们关联起来,使之能够正常编译运行略 尝试编写单元测试和集成测试用于测试一个矩形是否是正方形
|
Beta Was this translation helpful? Give feedback.
-
你认为的错误处理逻辑应该是怎样的?首先,错误需要一个良好的定义,rust 的枚举值可以支持多种类型,是一种不错的定义错误的方式,方便传递一些值来增加一些额外的信息,例如:
以上三种错误类型上确定了,并且额外的带有一些信息:
以上的实现谈不上多好,只是一些初级的简单的实现 以一个工作空间的形式创建一个项目,并在其下创建多个模块,并把它们关联起来,使之能够正常编译运行这是 https://github.com/dashjay/bytestack 最近编写的一个项目,内部使用了一些 workspace 项目组织,欢迎参观批评。 尝试编写单元测试和集成测试上方的 repo 中包含部分测试代码,算是打卡交作业了 |
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
要编写集成测试,可以在项目文件夹的tests文件夹下创建一个或多个测试文件,并使用普通的Rust代码编写测试函数。这些测试函数可以调用被测试的模块或者二进制可执行文件,并使用断言方法来验证其行为。运行集成测试可以使用cargo test命令,加上--test参数,后面跟上测试文件的名称。
|
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
All reactions