我是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;
}
答案 0 :(得分:2)
我认为我们不能告诉所提供的代码,但您确定您的测试方法是使用相同的参数调用GetDataSeries吗?我对第一个参数特别好奇,它在mock中是string.empty。如果您使用IgnoreParameters()或其中一个Is.Any()值,您可以缩小范围并查看是否存在问题。
所以也许尝试一下,看看它是否正确返回,然后如果这是问题就可以回溯。
dataProvider.Expect(dp => dp.GetDataSeries(String.Empty, level, year, null ,null, null)).IgnoreParameters().Return(dataSeries);
答案 1 :(得分:1)
您错过了对ReplayAll的调用:
_MockRepository.ReplayAll();
CollectionAssert.AreEqual(dataSeries, _DataSourceContext.FetchDataSeries(level, year, null, null, null));
请参阅:http://ayende.com/Wiki/Comparison+of+different+Rhino+Mocks+syntaxes.ashx