2013-07-22 7 views
1

기본적으로 일부 데이터 그룹을 가져 와서 메소드를 실행하는 메소드를 테스트하기 위해 유닛 테스트를 작성하려고합니다. 어떤 이유로 든 내 설정이 호출되지 않습니다. 나는 디버깅을했고, 전달 된 타입과 체크 아웃 된 타입, 그리고 데이터를 체크했다. 이것이 작동하지 않는 이유는 무엇입니까?유닛 테스트 설정이 전혀 호출되지 않았습니다.

이 내 테스트에 있습니다

MyArray[] grouped = myArray 
        .SelectMany(x => x.AccountValues) 
        .GroupBy(x => x.TimeStamp) 
        .Select(g2 => 
         new AccountValue { 
           Amount = g2.Sum(x => x.Amount), 
           TimeStamp = g2.Key }) 
        .ToArray(); 

helper 
    .Setup(s => s.Compute(grouped, grouped.Count()) 
    .Returns(someValue); 

var result = _engine.Get(accountNumbers, startDate, endDate, code); 

helper.Verify(v => v.Compute(grouped, grouped.Count()), Times.Exactly(1)); 

내가 다음과 같이 테스트가있어 실제 방법

public decimal? Get(long[] accountNumbers, 
          DateTime startDate, 
          DateTime endDate, 
          long code) 
{ 
     var accountNumbersInt = Array.ConvertAll(accountNumbers, i => (int)i); 

     var myArray = TransactionManager 
          .Get(accountNumbersInt, startDate, endDate, code); 

     var accountValues = GroupData(myArray); 
     var result= Helper.Compute(accountValues, accountValues.Count()); 
     return result; 
} 

internal myArray[] GroupData(Account[] myArray) 
{ 
    var grouped = myArray 
         .SelectMany(x => x.AccountValues) 
         .GroupBy(x => x.TimeStamp) 
         .Select(g2 => 
          new AccountValue { 
            Amount = g2.Sum(x => x.Amount), 
            TimeStamp = g2.Key }) 
         .ToArray(); 
    return grouped; 
} 

편집 : 도우미가 설정 테스트 설정에서 다음과 같이

[SetUp] 
public void Setup() 
{ 
    _engine = new CalcEngine(); 
    helper = new Mock<IHelper>(); 
    _engine.Helper = helper.Object; 
} 
+0

도우미 란 무엇입니까? 보통은 실제 테스트를 실행할 때 실행되며, 디버깅 할 때 특정 라인을 처음 실행할 때 변경해서는 안됩니다. – Gorgsenegger

+0

도우미를 어떻게 조롱 했습니까? 이것은 중요한 정보입니다. 왜냐하면 우리가 실제로 도우미 또는 도우미 모의 호출을하는지 알 수 없기 때문입니다 - 아마도 이것은 실수입니다 – Stephan

+0

@Stephan - 도우미 코드 –

답변

0

이 부분은 귀하의 방법을 호출하지 않습니다 :

helper 
    .Setup(s => s.Compute(grouped, grouped.Count()) 
    .Returns(someValue); 

테스트가 작성된 방식으로, 나는 귀하가 _engine.Get() 방법을 테스트하고있는 것으로 추정합니다. 아이디어는 모의 객체를 만들고 테스트중인 메소드 (다른 방법)에 전달하여 테스트중인 메소드를 호출 한 다음 그 결과로 부른 결과 (부작용)를 관찰하는 것입니다.

나는 당신의 Get() 방법으로 다음과 같은 일을하는지 볼 :

var result= Helper.Compute(accountValues, accountValues.Count()); 

가정하면 Helper은 당신이 당신의 단위 테스트에서 합격해야 확인하려는 것과 같은, 그래서 뭔가 같은 :

helper 
    .Setup(s => s.Compute(grouped, grouped.Count()) 
    .Returns(someValue); 

_engine.Helper = helper.Object; 

// your verifications here ... 
+0

도우미가 그런 식으로 설정되어있는 이유는 그것이 기괴하다. –

+0

@ newbie_86 내가 보는 방식 , 당신은'TransactioManager'를 조롱하고 유닛 테스트에서 생성 한 배열을 반환하도록 설정해야합니다. 현재 Verify는 떨어질 것입니다. 동일한 객체 (같은 결과 세트)를 가진 메소드를 호출하지 않기 때문입니다. –

관련 문제