Я новичок в NSubstitue (и совершенно новый для модульного тестирования в .NET вообще). Я хочу проверить, сохраняет ли мой класс все данные в разных файлах для каждой записи, например. StringDictionary.Как я могу подделать вызов метода текущего класса с помощью NSubstitute?
Говорят, у меня есть свой класс DataManipulation.cs
:
using System;
using System.Collections;
using System.Collections.Specialized;
namespace ApplicationName
{
// interface for NSubstitute
public interface IManipulator
{
void saveAllData();
void saveEntry(string entryKey, string entryValue);
}
public class DataManipulator : IManipulator
{
protected StringDictionary _data {get; private set;}
public DataManipulator()
{
_data = new StringDictionary();
}
public void addData(string name, string data)
{
this._data.Add(name, data);
}
public void saveAllData()
{
// potential implementation - I want to test this
foreach (DictionaryEntry entry in this._data)
{
this.saveEntry(entry.Key.ToString(), entry.Value.ToString());
}
}
public void saveEntry(string entryKey, string entryValue)
{
// interact with filesystem, save each entry in its own file
}
}
}
Что я хочу проверить: когда я звоню DataManipulator.saveAllData()
он сохраняет каждую _data
запись в отдельном файле - это значит, он работает saveEntry
число раз, кратное _data.Count
. Возможно ли это с NSubstitute?
Каждый раз, когда я пытаюсь использовать DataManipulation в качестве тестируемого объекта и отдельно как макет - при запуске Received()
У меня есть информация, что никаких вызовов не было сделано.
шаблон теста NUnit Я хочу использовать:
using System;
using System.Collections.Generic;
using NUnit.Framework;
using NSubstitute;
namespace ApplicationName.UnitTests
{
[TestFixture]
class DataManipulatorTests
{
[Test]
public void saveAllData_CallsSaveEntry_ForEachData()
{
DataManipulator dm = new DataManipulator();
dm.addData("abc", "abc");
dm.addData("def", "def");
dm.addData("ghi", "ghi");
dm.saveAllData();
// how to assert if it called DataManipulator.saveEntry() three times?
}
}
}
Или я должен делать это по-другому?
Спасибо! Прекрасно работает – BartekR