【发布时间】:2012-02-08 17:26:34
【问题描述】:
我正在尝试编写一个单元测试来检查解析错误。我正在从文件中流式传输数据,对其进行解析并使用 yield return 返回解析结果,然后将其传递给数据层以进行批量插入。
我无法模拟对数据层的调用。因为它被模拟了,所以它实际上从未从 yield return 中枚举值,因此我的解析方法永远不会执行。
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);
}
}
【问题讨论】:
标签: c# ienumerable rhino-mocks yield-return