我如何在 Rust 中测试私有方法?

How do I test private methods in Rust?

如何在 Rust 中测试私有方法?我没有找到任何关于它的信息。文档中也没有任何信息。

使用 #[test] 时,私有或 public 方法没有什么特别之处——您只是在编写可以访问任何它们可以访问的任何内容的完美普通函数。

fn private_function() {
}

#[test]
fn test_private_function() {
    private_function()
}

外部测试,例如 tests/*.rsexamples/*.rs,如果您使用的是 Cargo 或文档测试,请不要访问私有成员;他们也不应该:此类测试旨在 public API 测试,而不是处理实施细节。

我不知道这个问题是否仍然对你开放,但我找到了一些关于它的文档:

Test Organization

我从中保留的是你可以测试私有方法但是只有如果测试可以看到它(即它们在相同的范围),因为测试与任何其他函数一样遵循可见性规则。

这是一个工作示例:

pub fn add_two(a: i32) -> i32 {
    internal_adder(a, 2)
}

fn internal_adder(a: i32, b: i32) -> i32 {
    a + b
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn internal() {
        assert_eq!(4, internal_adder(2, 2));
    }
}

总而言之,请记住,是否应该测试私有方法的争论在测试社区中仍然存在。双方都有有效的论据,正确的答案只取决于你,你对测试过程的看法和你的项目背景。