作者:布丁宝宝-_932 | 来源:互联网 | 2023-05-26 15:13
如何在Rust中测试私有方法?我没有找到任何有关它的信息.文档中也没有任何信息.
1> Chris Morgan..:
在使用时#[test]
,私有或公共方法没有什么特别之处 - 您只需编写可以访问他们可以访问的任何内容的完全正常的函数.
fn private_function() {
}
#[test]
fn test_private_function() {
private_function()
}
外部测试,例如tests/*.rs
,examples/*.rs
如果您使用Cargo或doc测试,则无法访问私人成员; 它们也不应该:这些测试旨在成为公共API测试,而不是处理实现细节.
绝对允许外部测试访问私有部分,因为1)您可能需要访问私有部分才能通过公共API可靠地触发所有代码路径.例如,可能存在内部阈值,当达到时会触发不同的代码路径.您可能还需要故障注入或内部详细信息来触发边缘情况.2)访问私有部分可以为测试失败提供更好的诊断 - 您可以将内部信息插入到恐慌消息等...
诊断:这就是std :: fmt :: Debug的用途。对于其他情况,我坚持我的立场,即外部测试不应访问私有详细信息。外部测试不适合您描述的情况,这就是内部单元测试的目的。
在某些情况下,`fmt :: Debug`的粒度过于粗糙-例如,当您只需要特定的位时,您可能不希望打印有关整个庞大数据结构的详细信息。无论如何,内部测试还应该设置公共API的实际用例是否合适?如果没有,那是不会做的,因为我只需要这样做。如果是的话,那么我对所有这些和内部测试感到很高兴,尽管那时区别是毫无意义的?核心问题是,无论您多么努力,实现细节总是会以某种方式影响接口,没有解决之道。