代码之家  ›  专栏  ›  技术社区  ›  theringostarrs

Rhino嘲笑未正确返回集合的期望

  •  0
  • theringostarrs  · 技术社区  · 15 年前

    我是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 回复  |  直到 15 年前
        1
  •  1
  •   Mark Byers    15 年前

    您缺少重播的呼叫:

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

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

        2
  •  2
  •   Scott Kirkland    15 年前

    我认为我们无法分辨提供的代码,但您确定测试中的方法正在使用相同的参数调用GetDataSeries吗?我特别好奇第一个参数,模拟中的第一个参数是string.empty。如果使用ignoreparameters()或其中一个is.any()值,可以缩小范围,看看这是否是问题所在。

    所以,也许可以试试这个,看看它是否能正确返回,然后如果是这个问题,你可以回溯。

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