我正在尝试编写一条单元测试以检查解析错误。 我从文件流中输入数据,解析它并使用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);
}
}