Search code examples
c#unit-testingxunitfluent-assertions

IEnumerable.GetEnumerator unit Test


My part of code:

    public class BinaryTree<T> : IEnumerable<T>, IReadOnlyCollection<T> where T : IComparable
        {
.........

             public IEnumerator<T> GetEnumerator()
             {
                  return PreOrder().GetEnumerator();
             }

             IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();

.........

I have test for GetEnumerator() method. This test work correctly:

[Fact]
        public void GetEnumerator()
        {
            BinaryTree<int> tree = new BinaryTree<int>();
            int exc = 5;

            tree.Add(5);
            IEnumerator e = tree.GetEnumerator();
            e.MoveNext();
            Object act = e.Current;

            act.Should().Be(exc);
        }

But how test this part of code??

        IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();

Solution

  • IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
    

    Creates an explicit implementation of interface IEnumerable. To use it, you need to cast your object as an IEnumerable.

    public void GetEnumerator()
    {
        BinaryTree<int> tree = new BinaryTree<int>();
        int exc = 5;
    
        tree.Add(5);
        IEnumerator e = ((IEnumerable)tree).GetEnumerator();
        e.MoveNext();
        Object act = e.Current;
    
        act.Should().Be(exc);
    }