是否可以从测试中访问私有结构字段?

Geo*_*tic 2 unit-testing rust

我目前正在学习 Rust(到目前为止 1 周),我想测试我的代码。

我有这个结构:

pub struct MyStruct {
  pub field1: i64,
  field2: i64
}

impl MyStruct {
  pub fn new(a: i64) -> MyStruct {
    MyStruct { field1: a, field2: 0 }
  }
}
Run Code Online (Sandbox Code Playgroud)

现在在另一个模块的测试中,我想创建一个MyStruct具有特定的field2,但它是私有的。

有没有办法在不创建特殊构造函数的情况下做到这一点MyStruct

red*_*ime 6

您可以在同一模块中编写单元测试或为测试创建子模块。同一模块和所有嵌套模块中的代码可以完全访问私有字段。

// Your struct

mod test {
    use super::MyStruct;
    fn test() {
        let _ = MyStruct{ field1: 1, field2: 2 };
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢您的回答,我忘了说使用该结构的测试是在另一个模块中。编辑以添加此信息。 (2认同)