我有一段代码的逻辑大概是这样的,在utils模块的generate_id里调用了random模块的random_odd_int生成一个ID。
我现在想要想一个测试方法只测试utils模块里generate_id是否正确,random_odd_int函数已经有专门的测试方法了。我该怎么来写这个测试方法在执行单元测试的时候,generate_id调用random_odd_int时调用的是random_odd_int的mock方法每次都返回一个固定值?
我尝试了mockall这个库,但没有成功,mockall设置random_odd_int的mock方法只有在测试方法里调用才起作用,generate_id函数里调用的random_odd_int还是random模块里的方法。
pub mod utils {
use super::random::random_odd_int;
pub fn generate_id() -> String {
// 在这里调用random里的random_odd_int
let seed = random_odd_int();
format!("{:010}", seed)
}
}
#[cfg(test)]
mod tests {
use crate::utils::utils::generate_id;
#[test]
fn test_generate_id() {
let excepted = "newid9091";
// 在调用generate_id之前,我要怎样使用mock才能让random_odd_int返回固定值
let actual = generate_id();
assert_eq!(actual, excepted.to_string());
}
}
1
共 6 条评论, 1 页
评论区
写评论调整不了的吧,这两个互斥的条件,应该只能编译其中一个,也就是只有一个有跳转、refactor 之类的 ide 功能
你说的这几个在vscode中的问题,都可以通过调整vscode的配置,设置高亮的模式,是全部高亮,还是选择分支高亮。vscode的显示不是问题。 唯一需要考虑的是cfg这种方式,写多了,太乱,是不太优雅,哈哈。
这种方式基本只能应急,因为有很多缺点,比如
所以总体来说,用条件编译有点得不偿失
--
👇
LazyBoy: 在不更改书写模式的情况下,大概也只有条件编译宏好用了,就是第一位老兄说的#[cfg(test)]
简单写的就是:
在不更改书写模式的情况下,大概也只有条件编译宏好用了,就是第一位老兄说的#[cfg(test)]
简单写的就是:
推荐使用依赖注入,对测试非常友好
给一个不太美观的方法,用类似下面的方法来区分Test和非Test的代码,可以有多种用法,比如用Test标签来修饰use的部分,也可以在被调用的模块那边动手脚