2013-07-22 2 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; 
} 

EDIT: помощник устанавливается следующим образом в испытательной установке

[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

helper настроен так, вот почему это так странно –

+0

@ newbie_86, как я его вижу , вам нужно высмеять свой «TransactioManager» и настроить его для возврата массива, который вы создали в модульном тесте. В настоящее время проверка будет падать, потому что вы не вызываете метод с тем же объектом (тот же набор результатов) –

 Смежные вопросы

  • Нет связанных вопросов^_^