2016-09-28 5 views
0

私は同様に定義された2クラスのプロパティがあります。私はこのテストをデバッグするときC#クラスプロパティゲッター呼び出さ自動的

[TestMethod] 
    public void ValidationErrorTest() 
    { 
     CurrentError = "My Error"; 

     var empty = IsErrorStringEmpty(); 
    } 

private static string _validationError; 
    public static string ValidationError 
    { 
     get { 
      var temp = _validationError; 
      _validationError = "abc"; 
      return temp; 
     } 

     set { _validationError = value; } 
    } 

    public static string CurrentError { get; set; } 

方法:

public static bool IsErrorStringEmpty() 
    { 
     Console.WriteLine("dddd"); 

     return false; 
    } 

試験方法これは私が見ている動作です:

  1. テストメソッドの2行目がヒットする前に、ValidationError = null(Expected)。第一のラインがヒットする前に

    enter image description here

  2. それはIsErrorStringEmptyに入る()、、ValidationErrorを= nullは(予想されます)。

    enter image description here

  3. その後、それは第一ラインを打つの権利、ValidationErrorをは= "ABC"。 ValidationErrorプロパティにアクセスするためのこの時点までの明示的なコードがなくても、このゲッターがどのように呼び出されているかわかりません。

    enter image description here

私はゲッターにブレークポイントを持っているが、それはヒットしませんでしたし、コールスタックは以下の通りです。

enter image description here enter image description here

私はそれがどこかだと確信していますが、私はそれを見つけるように見えることはできません。すべてのポインタは大いに感謝しています!

+2

ゲッターにブレークポイントを置き、コードが壊れたときに呼び出しスタックを調べます。 –

+7

デバッガでゲッターを起動しています。代わりに '_validationError'を見てください。 –

+0

ああ私!ありがとうございました :)。 – AngieM

答えて

4

デバッガでゲッターを起動しています。ウォッチウィンドウに表示するプロパティの評価でコードが実行されると、実際の副作用とともに実際に実行されています。

代わりに_validationErrorを見てみてください。

ゲッターの副作用によってループが発生する可能性があります。それらを避けるのがベストです。

2

量子効果と同様に、結果を観察することによって結果を変更します。あなたがデバッグしているものを見てください。あなたはValidationErrorの中にあるものを見ようとしているので、ゲッターを呼びます。

ValidationErrorの代わりに_validationErrorをデバッガに追加する必要があります。

2番目のコードが一時停止すると、このプロパティが更新されないのが良い理由です。あなたは前にこのプロパティを観察してどこにもリセットしなかったので、これは​​になっているはずです。

関連する問題