2013年4月26日金曜日

PowerShot Nが届きました


Canon PowerShot Nが届きました。
動作がキビキビしてて気持ちいいですね。
ゴールデンウィーク中に色々と使って見たいと思います。

2013年4月23日火曜日

[c#]VSテストプロジェクトで単体テストのカバレッジが100%にならなかった点の対策

Visual Studio Team System 2008にてテストプロジェクトを利用して、単体テストを行っています。
また、このエディションではコードカバレッジを取れるので100%にすることも要件にしています。

その中で見た目は処理が通っているのですが、カバレッジが100%にならないケースが出てきました。
以下がその例です。


  1. public void Method01(System.Windows.Forms.Control.ControlCollection list)  
  2. {  
  3.     List<control> wk = new List<control>();  
  4.     foreach (Control tmp in list)  
  5.     {  
  6.         if (tmp is Label) continue;  
  7.         wk.Add(tmp);  
  8.     }  
  9. }  


Collectionをforeachしているだけなのですが、これが問題のようです。
詳しい理由はわかりませんが、裏方さんのコードに通らないパスがあるっポイです。
とにかく、Collectionをforeachするとダメなので、Listをforeachするように変える処理を入れます。


  1. //CollectionをListに変換する  
  2. public List<t> ConvertList<t>(ICollection collection)  
  3. {  
  4.     List<t> ret = new List<t>();  
  5.     IEnumerator tmp = collection.GetEnumerator();  
  6.       
  7.     while(tmp.MoveNext()) {  
  8.         ret.Add((T)tmp.Current);              
  9.     }  
  10.     return ret;  
  11. }  

それで、foreachの所でこのメソッドを使います。


  1. public void Method01(System.Windows.Forms.Control.ControlCollection list)  
  2. {  
  3.     List<control> wk = new List<control>();  
  4.     foreach (Control tmp in ConvertList<Control>(list))  
  5.     {  
  6.         if (tmp is Label) continue;  
  7.         wk.Add(tmp);  
  8.     }  
  9. }  


これでカバレッジが100%になるようになりました。