2017-05-21 9 views
1

は、私は(今のところ1週間)の時点で錆を学んだし、私は自分のコードをテストしたいです。テストからプライベートstructフィールドにアクセスできますか?

私はこの構造体があります。他のモジュール内のテストで今

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

impl MyStruct { 
    pub fn new(a: i64) -> MyStruct { 
    MyStruct { field1: a, field2: 0 } 
    } 
} 

を、私は特定のfield2MyStructを作成したいが、それはプライベートです。

MyStructのための特別なコンストラクタを作成せずにそれを行うための方法はありますか?

+0

試験は、他のコードと同じ規則に従います。彼らが同じモジュールまたは子孫にいない場合、彼らは私的なものを見ることができません。 –

+0

ユニットテストの場合は、同じモジュール内にあるべきではありませんか?それ以外の場合は、実際にコンストラクタが必要なようです。つまり、かなり新しい 'pub(restricted)'機能が役に立つかもしれません。 https://github.com/rust-lang/rfcs/blob/master/text/1422-pub-restricted.md – the8472

+0

@ the8472:私はこの1つを使用するモジュールをテストしています。私は錆で能力をあざけるを認識してないんだけど、それは私がとにかく毎晩実行し、この機能をご確認ください:) –

答えて

4

あなたは同じモジュールでユニットテストを書いたり、テストのためのサブモジュールを作成することができます。同じモジュール内およびネストされたすべてのモジュール内のコードは、プライベートフィールドへの完全なアクセス権を持ちます。

// Your struct 

mod test { 
    use super::MyStruct; 
    fn test() { 
     let _ = MyStruct{ field1: 1, field2: 2 }; 
    } 
} 
+0

は、あなたの答えをありがとうC++ :)ゴナにGoogleのテストでそれをやっのだ方法だ、私はテストと言うのを忘れて構造体を使用して別のモジュールにあります。この情報を追加するように編集しました。 –

+0

テストフェーズでのみ考慮されるように、テストモジュールに '#[cfg(test)]を追加することも検討してください。 –

関連する問題