1

コードのテストを使用/実行/作成することを学んでいて、フェイク/モックオブジェクトに 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()、反復が機能するように正しいオブジェクトを返すように構成する方法ですか、それともここで何か間違ったことをしていますか?

どんな助けでも大歓迎です。

ありがとう

4

2 に答える 2