测试私有函数的惯用方法是什么?
What is the idiomatic way to have a private function tested?
Rust 书 says 使用 "tests" 模块是进行单元测试的惯用方式。但是,如果该功能未标记 'pub',我无法在测试模块中看到来自超级模块的功能。那么应该如何测试内部功能呢?
我的第一反应是想办法 #ifdef
关键字 pub
。我过去曾为 C++ 测试这样做过。对于 Rust,我所做的只是简单地测试模块中的私有函数,然后测试 "tests" 模块中的 public 接口。
我做的对吗?
将您的测试模块嵌套在包含私有方法或结构的模块中:
mod inners {
fn my_func() -> u8 { 42 }
mod test {
#[test]
fn is_answer() {
assert_eq!(42, super::my_func());
}
}
}
当然,我不同意你应该测试一般的私有内容,但那是一个不同的讨论。
测试私有函数的惯用方法不是。单元测试应该测试 class' public 行为。私有方法只是您应该测试的上述 public 方法的实现细节。
Rust 书 says 使用 "tests" 模块是进行单元测试的惯用方式。但是,如果该功能未标记 'pub',我无法在测试模块中看到来自超级模块的功能。那么应该如何测试内部功能呢?
我的第一反应是想办法 #ifdef
关键字 pub
。我过去曾为 C++ 测试这样做过。对于 Rust,我所做的只是简单地测试模块中的私有函数,然后测试 "tests" 模块中的 public 接口。
我做的对吗?
将您的测试模块嵌套在包含私有方法或结构的模块中:
mod inners {
fn my_func() -> u8 { 42 }
mod test {
#[test]
fn is_answer() {
assert_eq!(42, super::my_func());
}
}
}
当然,我不同意你应该测试一般的私有内容,但那是一个不同的讨论。
测试私有函数的惯用方法不是。单元测试应该测试 class' public 行为。私有方法只是您应该测试的上述 public 方法的实现细节。