2014-01-08 2 views
3

자동화 테스트에서 테스트 사례 입력으로 사용될 검색 매개 변수의 조합을 생성하는 것이 문제입니다.각 반복마다 동일한 결과를 반환하는 yield return

private IEnumerable<object[]> _GetCombinations(ArrayList inputs) 
{ 
    var returnobjects = new object[inputs.Count]; 
    var element = inputs[0]; 
    var type = element.GetType(); 
    var generictype = type.GenericTypeArguments[0]; 
    var elementvalues = type.GetProperty("PossibleValues").GetValue(element, null) as IEnumerable; 

    foreach (var val in elementvalues) 
    { 
     returnobjects[0] = val; 
     if (inputs.Count > 1) 
     { 
      var objs = _GetCombinations(inputs.GetRange(1, inputs.Count - 1)); 
      foreach (var item in objs) 
      { 
       for (int i = 0; i < item.Length; i++) 
       { 
        returnobjects[i + 1] = item[i]; 
       } 
       yield return returnobjects; 
      } 
     } 
     else 
     { 
      yield return returnobjects; 
     } 
    } 
} 

내부 TestMethod :

[TestMethod] 
public void GetCombinationTest() 
{ 
    var x = new CombinationInput<Enums.AmountType>(); 
    var y = new CombinationInput<Enums.AreaMeasureType>(); 
    var z = new CombinationInput<Enums.DisplayItemType>(); 

    ArrayList list = new ArrayList(); 
    list.Add(x); 
    list.Add(y); 
    list.Add(z); 
    var combgen = new CombinationGenerator(list); 
    var combs = combgen.GetCombinations(); 
} 

내가 코드를 실행할 때 가져 조합이 항상 같은 조합을 반환하지만 때를 디버그를

public class CombinationInput<T> 
{ 
    public string Name { get; set; } 
    public List<T> PossibleValues { get; set; } 
    public bool ReadOnly { get; set; } 
} 

GetCombinations는 a를 Combinationsgenerator 클래스의 방법이다 코드를 통해 수익률 계산서를 쳤을 때 올바른 조합을 얻습니다.

+0

참조 유형은 참조로 전달됩니다 *. 배열은 참조 유형입니다. –

답변

3

항상 콘텐츠 자체를 편집하는 것과 같은 개체를 반환합니다. 당신이 얻는 것은 배열에 대한 참조이며, 항상 같은 참조입니다. 동일한 배열을 재사용하는 대신 루프 내에서 returnobjects의 선언 및 작성을 이동해야합니다.

관련 문제