使用“测试”模块的Rust书says是进行单元测试的惯用方法。但是,如果该函数未标记为“pub”,我无法在tests模块中看到超级模块的函数。那么如何测试内部函数呢?
我的第一直觉是寻找#ifdef
关键字pub
的方法。我过去曾为C ++测试做过这个。对于Rust,我所做的只是对模块中的私有函数进行测试,然后在“tests”模块中测试公共接口。
我做得对吗?
答案 0 :(得分:6)
将测试模块嵌套在包含私有方法或结构的模块中:
mod inners {
fn my_func() -> u8 { 42 }
mod test {
#[test]
fn is_answer() {
assert_eq!(42, super::my_func());
}
}
}
当然,我不同意你应该测试一般的私人内容,但这是一个不同的讨论。
答案 1 :(得分:3)
测试私有函数的惯用方法不是。单元测试应该测试一个类的公共行为。私有方法只是您应该测试的上述公共方法的实现细节。