C
C#12mo 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
}
[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
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
2 Replies
sneezey
sneezey12mo ago
I assume it's something to do with IEnumerable being a type that it creates even before trying to freeze?
Accord
Accord12mo ago
Looks like nothing has happened here. I will mark this as stale and this post will be archived until there is new activity.