我正在将一些测试对象从RhinoMocks转换为NSubstitute,并且无法设置我的模拟存储库。如何使用NSubstitute重定向参数
见下面的以下单元测试代码:
[SetUp]
public void SetUp()
{
_converter = Substitute.For<IStatisticsConverter>();
_repository = Substitute.For<IRepository>();
_updater = new StatisticsUpdater(_converter, null, _repository);
}
[Test]
public void CreateFrom_NoExistingItem_NewItemWithStatistics()
{
var statisticsLog = new StatisticsLog();
var statistics = new Statistics();
_converter.ConvertToStatistics(statisticsLog).Returns(statistics);
_repository.When(x => x.SaveStatistics(Arg.Any<Item>(), statistics))
.Do(x => UpdateItem(?????,statistics));
var actualItem = _updater.CreateFrom(statisticsLog);
Assert.IsNotNull(actualItem);
Assert.AreEqual(1, actualItem.Statistics.Count(), "number of statistics entries");
Assert.AreSame(statistics, actualItem.Statistics.First(), "expected statistics");
}
private void UpdateItem(Item item, Statistics statistics)
{
item.AddStatistics(statistics);
}
测试在Assert.AreEqual
引发错误:“预期1和实际为0。”
会发生什么,_updater
是被测系统。 CreateFrom()
函数创建一个新的Item()
,然后在内部调用Update(statisticsLog)
。 StatisticsLog
是一个XML文件。
public Item CreateFrom(T deserializedEntity)
{
Item = new Item();
Update(deserializedEntity);
return Item;
}
一旦文件被在现实更新解析,它就会被保存到其连接到新的Item
(这也被加入到数据库中,因为它之前并不存在)的数据库。
现在,问题是,我需要得到这个新的Item
并将其传递到UpdateItem()
嘲笑添加到数据库的功能。它将Statistics
添加到Item.Statistics
列表中。
那么 - 有没有一种方法可以从嘲讽的Repository
中剔除这个参数并将其传入UpdateItem
?
如果它有助于看起来像这样的旧代码: _repository.Stub(X => x.SaveStatistics(NULL,NULL)) .IgnoreArguments() .WhenCalled(MI =>的updateItem(( Item)mi.Arguments.First(),(Statistics)mi.Arguments.Second())); –