c# – Moq – 无法遍历隐藏的IEnumerable
发布时间:2020-12-15 21:17:55 所属栏目:百科 来源:网络整理
导读:我们有一个相当复杂的界面层次结构,我很难让Moq做我想做的事情. 我有一个接口IReservation,它扩展了IRulesReservation,并用其他类型的新实现隐藏了它的枚举器. public interface IReservation : IRulesReservation{ new IEnumeratorIRoutePart GetEnumerator
我们有一个相当复杂的界面层次结构,我很难让Moq做我想做的事情.
我有一个接口IReservation,它扩展了IRulesReservation,并用其他类型的新实现隐藏了它的枚举器. public interface IReservation : IRulesReservation { new IEnumerator<IRoutePart> GetEnumerator(); } IRulesReservation扩展了IEnumerable. public interface IRulesReservation : IEnumerable<IRulesRoutePart> { } 我正在尝试测试的方法接受IReservation,但是在各个点需要访问IEnumerable< IRulesRoutePart>.我的模拟设置如下: m_mock = new Mock<IReservation>(); m_mock.As<IRulesReservation>().Setup(r => r.GetEnumerator()).Returns(routeParts.Select(rp => (IRulesRoutePart)rp).GetEnumerator()); 在该示例中,routeParts是来自Mock< IRouteParts>的IRouteParts的列表.使用.As< IRulesRoutePart>()设置的对象. 每当我在我正在测试使用枚举器的函数中获得一些代码时,它就会跨越迭代,就好像集合是空的一样. 我在设置中做错了吗?或者Moq是否无法处理以这种方式隐藏的枚举器? 编辑:在模拟器上运行测试代码时我注意到的一些奇怪的行为: Assert.That((reservation.Object as IRulesReservation).Count() == 8); Assert.That((reservation.Object as IEnumerable<IRulesRoutePart>).Count() == 8); 第一行将通过,但第二行将失败. m_mock.As<IEnumerable<IRulesRoutePart>>().Setup(r => r.GetEnumerator()).Returns(routeParts.Select(rp => (IRulesRoutePart)rp).GetEnumerator()); 解决方法
您的设置返回的对象实际上是否有数据?那可能是你的问题.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |