我正在將一些測試對象從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())); –