2010-04-15 3 views
0

Вот метод, который я пытаюсь тест:Как издеваются это значение, используя Rhino Mocks

public override void CalculateReductionOnYield() 
    { 
     log.LogEnter(); 
     if (illus.RpFundStreams.Count <= 0) 
     { 
      throw new InvalidDataException("No regular premium fund streams which are required in order to calculate reduction on yield"); 
     } 
     // Add the individual ReductionOnYield classes to the collection.) 
     foreach (RegularPremiumFundStream fs in illus.RpFundStreams) 
     { 
      foreach (int i in ReductionOnYieldMonths) 
      { 
       ReductionOnYield roy = new ReductionOnYield(i); 
       roy.FundStream = fs; 
       ReductionsOnYield.Add(roy); 
      } 
      foreach (ReductionOnYield redOnYield in ReductionsOnYield) 
      { 
       if (redOnYield.Month == 0 || illus.RegularPremiumInPlanCurrency == 0M) 
       { 
        redOnYield.Reduction = 0M; 
       } 
       else 
       { 
        double[] regPremiums = new double[redOnYield.Month + 1]; 
        for (int i = 1; i <= redOnYield.Month; i++) 
        { 
         regPremiums[i - 1] = Convert.ToDouble(-1*redOnYield.FundStream.FundStreamMonths[i].ValRegularPremium); 
        } 
        regPremiums[redOnYield.Month] = Convert.ToDouble(redOnYield.FundStream.GetFundStreamValue(redOnYield.Month)); 
        redOnYield.Reduction = Convert.ToDecimal(Math.Pow((1 + Financial.IRR(ref regPremiums, 0.001D)), 12) - 1); 
       } 
      } 
     } 

Как издеваются все необходимые классы для проверки значения redOnYield.Reduction, чтобы убедиться, что он работает правильно?

например. как мне высмеять redOnYield.FundStream.GetFundStreamValue (redOnYield.Month) и redOnYield.FundStream.FundStreamMonths [i] .ValRegularPremium?

Действительно ли это проверка? Или я об этом ошибаюсь?

ответ

0

без получения дополнительной информации о ваших объектах его трудно сказать, но вы хотите что-то вроде:

var fundStream = MockRepository.GenerateStub<TFundStream>(); 
fundStream.Stub(f => f.GetFundStreamValue(60)).Return(220000M); 

var redOnYeild = MockRepository.GenerateStub<TRedOnYeild>(); 
redOnYeild.Stub(r => r.FundStream).Return(fundStream); 
+0

добавлен исходный код на вопрос ... – Bernard

0

redOnYield является объект, возвращаемый из переборе ReductionsOnYield. Я не вижу, откуда это происходит. Если мы предположим, что это виртуальное свойство, тогда вы захотите создать коллекцию mock объектов ReductionOnYield и вырезать ReductionsOnYield, чтобы вернуть вашу издеваемую коллекцию (или, чтобы упростить ее тестирование), CalculateReductionOnYield принимает IEnumerable и работает с этой коллекцией).

После того, как вы устраните проблему ReductionsOnYield, реакция Андрея о том, чтобы выровнять свойства, приведет вас туда, где вы хотите быть. Разумеется, это предполагает, что FundStream является виртуальным (поэтому его можно издеваться/прорезать), а также GetFundStreamValue и FundStreamMonths RegularPremiumFundStream.

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