Ожидание Rhino Mocks не вернуло коллекцию правильно - PullRequest
0 голосов
/ 05 декабря 2009

Я новичок в Rhino Mocks и вообще использую фреймворки для модульного тестирования. Я написал следующий тест, в котором я установил ожидание для фиктивного объекта IDataProvider для возврата коллекции объектов. В поставляемой коллекции есть один объект.

Когда я запускаю тест, вызов IDataProvider возвращает пустой список, когда он должен вернуть список с одним объектом в нем.

Есть идеи, что не так?

Вот мой тест: (Пожалуйста, извините за любые плохие практики здесь ... не стесняйтесь упоминать любые. Я пытаюсь учиться! Спасибо)

[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();
}

Соответствующая часть тестируемого метода: (Вызов DataProvider.GetDataSeries возвращает пустой список ... это должно вернуть список с заглушками.)

      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;
  }

Ответы [ 2 ]

2 голосов
/ 05 декабря 2009

Не думаю, что мы можем сказать предоставленный код, но вы уверены, что ваш тестируемый метод вызывает GetDataSeries с теми же параметрами? Мне особенно любопытен первый параметр, который в макете является string.empty. Если вы используете IgnoreParameters () или одно из значений Is.Any (), вы можете сузить его и посмотреть, является ли это проблемой.

Так что, возможно, попробуйте это и посмотрите, вернется ли он правильно, тогда вы можете вернуться, если это проблема.

dataProvider.Expect(dp => dp.GetDataSeries(String.Empty, level, year, null ,null, null)).IgnoreParameters().Return(dataSeries);
1 голос
/ 05 декабря 2009

Вы пропустили звонок в ReplayAll:

    _MockRepository.ReplayAll();
    CollectionAssert.AreEqual(dataSeries, _DataSourceContext.FetchDataSeries(level, year, null, null, null));

См .: http://ayende.com/Wiki/Comparison+of+different+Rhino+Mocks+syntaxes.ashx

...