我正在学习为我的代码使用/执行/编写测试,并开始为我的假/模拟对象使用 FakeItEasy,现在我遇到了一个问题:
我有以下实现的类和实现的IEnumerable
内部类IEnumerator
(下面不完整的代码):
public interface IEnumarableString : IEnumarable
{ }
public class AdvancedString : IEnumarableString
{
private string[] _strings;
private class StringEnumerator : IEnumerator
{
private IEnumerator GetEnumerator()
{
return (IEnumerator)this;
}
public object Current {get; set;}
public bool MoveNext()
{
_position++;
return _position < strings.Length;
}
public void Reset()
{
_position = -1;
}
}
public IEnumerator GetEnumerator()
{
return new StringEnumerator(_strings);
}
}
我想在我的测试中使用 FakeItEasy 并“伪造”它的迭代行为,我尝试了以下代码,但它不会在需要时自行迭代(就像没有元素一样跳过 foreach):
IEnumarableString stringFake = A.Fake<IEnumarableString>();
A.CallTo(() => stringFake.GetEnumerator().MoveNext()).Returns(false).Once();
A.CallTo(() => stringFake.GetEnumerator().MoveNext()).Returns(true).Once();
例如,试图搜索网络,但找不到任何东西。现在我的问题是如何配置stringFake.GetEnumerator()
返回正确的对象,以便迭代可以工作,还是我在这里做错了什么?
任何帮助,将不胜感激。
谢谢