Я в процессе преобразования некоторых тестовых объектов из 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 и Actual 0."
Что происходит, _updater
- это системный тест. Функция CreateFrom()
создает новый Item()
, а затем внутренне вызывает Update(statisticsLog)
. StatisticsLog
- это XML-файл.
public Item CreateFrom(T deserializedEntity)
{
Item = new Item();
Update(deserializedEntity);
return Item;
}
После того, как файл обрабатывается в реальном Updater, оно сохраняется в базе данных, которая прилагается к новому Item
(который также был добавлен в базу данных, как это раньше не было).
Теперь проблема заключается в том, что мне нужно получить эту новинку Item
и передать ее в UpdateItem()
, которая издевается над функциональностью добавления в базу данных. Он добавляет Statistics
в список Item.Statistics
.
Итак - есть ли способ вытащить этот аргумент из насмешливого Repository
и передать его в UpdateItem
?
Если это помогает старый код выглядел следующим образом: _repository.Stub (х => x.SaveStatistics (NULL, NULL)) .IgnoreArguments() .WhenCalled (миль => UpdateItem ((Item) mi.Arguments.First(), (Statistics) mi.Arguments.Second())); –