2009-12-04 4 views
0

Je suis nouveau à Rhino Mocks, et en utilisant des cadres d'isolement fictifs en général pour les tests unitaires. J'ai écrit le test suivant, où j'ai mis en place une attente pour un objet IDataProvider fictif pour retourner une collection d'objets. La collection fournie contient un objet.Rhino Mocks attente ne pas retourner la collection correctement

Lorsque j'exécute le test, l'appel à IDataProvider renvoie une liste vide lorsqu'il doit renvoyer la liste avec un objet.

Des idées sur ce qui ne va pas?

Voici mon test: (S'il vous plaît excuser les mauvaises pratiques ici ... ne hésitez pas à parler de tout Im essayant d'apprendre Merci.!)

[TestMethod()] 
public void FetchDataSeries_NeedsUpdate_SuccessfulDataSeriesRetrievedFromDataProvider() { 
    List<IDataSeries> dataSeries = new List<IDataSeries>(); 
    dataSeries.Add(new DataSeries("test")); 
    DrillDownLevel level = DrillDownLevel.YEAR; 
    int? year = 2008; 

    var dataProvider = _MockRepository.CreateMock<IDataProvider>(); 
    dataProvider.Expect(dp => dp.GetDataSeries(String.Empty, level, year, null ,null, null)).Return(dataSeries); 
    _DataSourceContext.DataProvider = dataProvider; 

    CollectionAssert.AreEqual(dataSeries, _DataSourceContext.FetchDataSeries(level, year, null, null, null)); 
    dataProvider.VerifyAllExpectations(); 
} 

partie pertinente de la méthode à l'essai: (Le DataProvider. GetDataSeries appel retourne la liste vide ... cela devrait retourner la liste bouchonné.)

 public override List<IDataSeries> FetchDataSeries(DrillDownLevel? drillDownLevel, int? year, int? month, DateTime? week, int? day) { 

    List<IDataSeries> dataSeries = new List<IDataSeries>(); 

    // Cache data for maximum cache period 
    // if data has been cached for longer than the maxium cache period OR the updateInterval has elapsed UNLESS LastUpdateAttempt was less than minimum update interval 
    if (NeedsUpdate(LastUpdate, LastUpdateAttempt)) { 

     // Attempt to get new data 
     LoggingService.InfoFormat("DataSourceContext: {0}: Attempting to get new data:", Name); 
     dataSeries = DataProvider.GetDataSeries(DataQuery, drillDownLevel, year, month, week, day); 
    } 

    return dataSeries; 
    } 
+0

Peut-être qu'il a trouvé un bug dans le code que vous testez? Pourriez-vous poster le code pour FetchDataSeries aussi? –

+0

IDataProvider.GetDataSeries est-il surchargé ou existe-t-il une seule méthode portant ce nom? Quel est le paramètre DataQuery transmis à la méthode dans l'implémentation? –

Répondre

2

Je ne pense pas que nous pouvons dire le code fourni, mais êtes-vous sûr que votre méthode dans les tests aPPELLE GetDataSeries avec les mêmes params? Je suis particulièrement curieux au sujet du premier paramètre, qui dans le simulacre est string.empty. Si vous utilisez IgnoreParameters() ou l'une des valeurs Is.Any(), vous pouvez l'affiner et voir si c'est le problème.

Alors peut-être essayer cela et voir si elle retourne correctement, alors vous pouvez revenir en arrière si c'est le problème.

dataProvider.Expect(dp => dp.GetDataSeries(String.Empty, level, year, null ,null, null)).IgnoreParameters().Return(dataSeries); 
+0

ouais j'ai considéré que les params étaient diff, mais à l'inspection ils sont les mêmes que ce que l'attente recherche, mais IgnoreParameters serait mieux de toute façon juste pour exclure ... merci! – theringostarrs

Questions connexes