2010-04-15 2 views
0

est la méthode Ici, je suis en train de tester:Comment se moquent de cette valeur I en utilisant 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); 
       } 
      } 
     } 

Comment puis-je me moque de toutes les classes nécessaires pour tester la valeur de redOnYield.Reduction pour vous assurer que cela fonctionne correctement?

par exemple. Comment puis-je simuler redOnYield.FundStream.GetFundStreamValue (redOnYield.Month) et redOnYield.FundStream.FundStreamMonths [i] .ValRegularPremium?

Est-ce un test valide? Ou est-ce que je vais à ce sujet dans le mauvais sens?

Répondre

0

sans plus d'informations sur vos objets est difficile à dire, mais vous voulez quelque chose comme:

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

a ajouté le code source à la question ... – Bernard

0

redOnYield est un objet retourné par itérer ReductionsOnYield. Je ne vois pas d'où cela vient. Si nous supposons que c'est une propriété virtuelle, alors vous voudrez créer une collection d'objets ReductionOnYield simulés et sortir ReductionsOnYield pour retourner votre collection mockée (ou, pour faciliter le test, avoir CalculateReductionOnYield accepter un IEnumerable et opérer sur cette collection). Une fois que vous avez résolu le problème ReductionsOnYield, la réponse d'Andrew à la suppression des propriétés vous permettra d'obtenir où vous voulez être. Bien sûr, cela suppose que FundStream est virtuel (donc peut être mocked/stubbed) ainsi que GetFundStreamValue et FundStreamMonths de RegularPremiumFundStream.