C#C
C#3y ago
sneezey

❔ NSubstitute on IEnumerable

Hey - I'm trying to "freeze" an IEnumerable<> and return a mocked enumerator

However, when doinmg so I get
[Test, AutoData]
public void Test1(
    [Frozen] IEnumerable<int> ints)
{
    // Arrange
    ints
        .GetEnumerator()
        .Returns(new List<int> { 1,2,3,4 }.GetEnumerator());

    // Act

    // Assert
}


throws
NSubstitute.Exceptions.CouldNotSetReturnDueToNoLastCallException : Could not find a call to return from.

Make sure you called Returns() after calling your substitute (for example: mySub.SomeMethod().Returns(value)),
and that you are not configuring other substitutes within Returns() (for example, avoid this: mySub.SomeMethod().Returns(ConfigOtherSub())).

If you substituted for a class rather than an interface, check that the call to your substitute was on a virtual/abstract member.
Return values cannot be configured for non-virtual/non-abstract members.

Correct use:
    mySub.SomeMethod().Returns(returnValue);

Potentially problematic use:
    mySub.SomeMethod().Returns(ConfigOtherSub());
Instead try:
    var returnValue = ConfigOtherSub();
    mySub.SomeMethod().Returns(returnValue);


  Stack Trace: 
    SubstitutionContext.LastCallShouldReturn(IReturn value, MatchArgs matchArgs)
    IHateTDD.Test1(IEnumerable`1 ints) line 15
Was this page helpful?