Я пытаюсь написать модульный тест для проверки ошибок синтаксического анализа. Я передаю данные из файла, разбираю его и возвращая результат анализа с возвратом доходности, а затем передаю его на уровень данных в объемную вставку.Rhino Mock для выполнения возврата доходности
У меня возникли проблемы, издеваясь над вызовом слоя данных. Поскольку это насмехается, он никогда не перечисляет значения из доходности yield, и поэтому мой метод разбора никогда не выполняется.
public class Processor
{
public IUnityContainer Container { get; set; }
public void ProcessFile(Stream stream)
{
var datamanager = Container.Resolve<IDataManager>();
var things = Parse(stream);
datamanager.Save(things);
}
IEnumerable<string> Parse(Stream stream)
{
var sr = new StreamReader(stream);
while (!sr.EndOfStream)
{
string line = sr.ReadLine();
// do magic
yield return line;
}
}
}
Я пробовал что-то вроде этого, которое явно не работает.
[TestMethod]
[ExpectedException(typeof(ApplicationException))]
public void ProcessFile_InvalidInput_ThrowsException()
{
var mock = new MockRepository();
var stream = new MemoryStream();
var streamWriter = new StreamWriter(stream);
streamWriter.WriteLine("\\:fail");
streamWriter.Flush();
stream.Position = 0;
var datamanager = mock.Stub<IDataManager>();
TestContainer.RegisterInstance(datamanager);
var repos = new ProcessingRepository();
TestContainer.BuildUp(repos);
using (mock.Record())
{
Expect.Call(file.InputStream).Return(stream);
Expect.Call(delegate() { repos.Save(new List<string>()) }).IgnoreArguments();
}
using (mock.Playback())
{
repos.ProcessFile(stream);
}
}
WhenCalled был именно тем, что я искал. Благодаря! – bmancini