首页 / C# / c# – Rhino模拟执行收益率回报
c# – Rhino模拟执行收益率回报
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – Rhino模拟执行收益率回报,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2262字,纯文字阅读大概需要4分钟。
内容图文
![c# – Rhino模拟执行收益率回报](/upload/InfoBanner/zyjiaocheng/784/f1045475be9141fd993f569cc72cc73c.jpg)
我正在尝试编写单元测试来检查解析错误.我正在从一个文件中传输数据,解析它并返回带有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);
}
}
解决方法:
一个最佳解决方案是将“// do magic”中发生的内容放在一个单独的方法中,这样它就可以单独进行单元测试 – 无需从处理StreamReader的while循环内部调用.
您看到的问题是由于对枚??举的惰性评估.由于您的测试代码都没有实际枚举“事物”,因此永远不会处理“幕后”构建以处理迭代器块的状态机.
您需要枚举项目才能在Parse方法中实际执行逻辑.您可以使用Rhino.Mocks“WhenCalled”方法(我显示AAA语法,因为我不记得如何使用记录/重放语义)来执行此操作:
注意:这是未经测试的代码
datamanager.Stub(d => d.Save(null)).IgnoreArguments().WhenCalled(m => int count = ((IEnumerable<string>)m.Arguments[0]).Count());
会发生的情况是,当调用存根上的Save方法时,会向“WhenCalled”传递一个参数(m),其中包含有关所调用方法的信息.抓住第一个参数(事物),将其转换为IEnumerable< string>得到它的数量.这将迫使对可枚举的评估.
内容总结
以上是互联网集市为您收集整理的c# – Rhino模拟执行收益率回报全部内容,希望文章能够帮你解决c# – Rhino模拟执行收益率回报所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。