2012-06-12 3 views
2
using System; 
using System.Collections.Generic; 
using System.Text; 

[Serializable] 
public class ColumnDataField 
{ 
    #region Fields 

    private int _columnIndex; 
    private string _dataFields; 

    #endregion Fields 

    #region Properties 

    /// <summary> 
    /// Column index 
    /// </summary> 
    public int ColumnIndex 
    { 
     get { return _columnIndex; } 
     set { _columnIndex = value; } 
    } 

    /// <summary> 
    /// Data fields 
    /// </summary> 
    public string DataFields 
    { 
     get { return _dataFields; } 
     set { _dataFields = value; } 
    } 

    /// <summary> 
    /// Convert DataFields string to data field list 
    /// </summary> 
    internal List<String> DataFieldList 
    { 
     get 
     { 
      if (string.IsNullOrWhiteSpace(DataFields)) return new List<String>(); 

      string[] _array = DataFields.Split(new Char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); 

      List<String> _fields = new List<String>(_array); 

      for (int _i = _fields.Count - 1; _i >= 0; _i--) 
      { 
       _fields[_i] = _fields[_i].Trim(); 
       if (string.IsNullOrWhiteSpace(_fields[_i])) _fields.RemoveAt(_i); 
      } 

      return _fields; 
     } 

     set 
     { 
      StringBuilder _buffer = new StringBuilder(); 

      foreach (string _field in value) 
      { 
       if (_buffer.Length > 0) _buffer.Append(","); 
       _buffer.Append(_field); 
      } 

      DataFields = _buffer.ToString(); 
     } 
    } 

    #endregion Properties 
} 

}단위 테스트 내부 목록 <String>

내가 그렇게 나를 쉽게 이동 C#에서 인턴 단위 테스트입니다.

다른 프로젝트에서는 너무 많은 문제가 없었지만 내부 목록을 단위 테스트하는 방법을 생각해 낼 수 없습니다.

[TestMethod] 
    public void DataFields_Test() 
    { 
     ColumnDataField questionText = new ColumnDataField(); 
     questionText.DataFields = "test"; 
     string expected = "test"; 
     string actual = questionText.DataFields; 
     Assert.AreEqual(expected, actual); 
    }  

는 그래서는 다른 코드 중 하나를 통해 않을거야 것을보다 DataFields 속성하지만 다른를 실행합니다 :

내가 내 단위 테스트를 위해 지금까지 가지고있는 코드입니다. 나는 이것에 관해 가장 좋은 방법을 찾아 내려고 노력하면서 온라인에서 검색을 해왔다. 나는 무엇을해야할지 정확히 말할 필요가 없지만 안내는 크게 감사 할 것입니다.

+0

내가 코드가 리팩토링하는 것이 그들에게 좋을 것. 그 길에는 너무 많은 논리가 있습니다. –

답변

4

옵션 # 0 : 내부 방법을 테스트하는 방법에 대해 상사에게 문의하십시오.

옵션 # 1 : 테스트중인 어셈블리에 InternalsVisibleTo을 추가하고 DataFieldList을 직접 호출하십시오.

[assembly:InternalsVisibleTo("YourTestAssemblyName")] 

옵션 # 2 : 결과에 액세스 할 수있는 내부 속성을 호출하는 것을 테스트하십시오.

옵션 # 3 : 내부 속성/필드/메소드/클래스/등을 테스트하지 마십시오.

옵션 #의 ProbablyShouldn't ... 나는 확신합니다 더 많은 옵션이 있습니다 : 당신은 내부 속성을 "발견"리플렉션을 사용할 수 있지만 당신은 아마 그렇게는 안된다.

여담으로

, 당신은 크게 검증되지 않은 속성에 코드를 단순화 할 수 있습니다 :

//.Net 4 
get 
{ 
    var cleansed = DataFields.Split(new [] { ',' }, StringSplitOptions.RemoveEmptyEntries) 
          .Select(df => df.Trim()) 
          .Where(str => !string.IsNullOrWhitespace(str)); 
    return new List<string>(cleansed); 
} 
set 
{ 
    DataFields = string.Join(",", value); 
} 
+0

+1 내부 용입니다. 그것은 나를 위해 잘 작동합니다. – Joe

+1

옵션 # 0은 실제로 좋은 아이디어입니다. 어쩌면 이것은 이미 프로젝트에서 결정되었을 것입니다. – usr