An NSubstitute Extension Method Pitfall [Snippet]
In this quick post, a developer goes over a problem that has tripped him up several times that sent him down a few deep rabbit holes, and how to solve it.
Join the DZone community and get the full member experience.
Join For FreeNot a huge post, but this has tripped me up several times, and sent me down some quite deep rabbit holes.
On to the story…
I once had a check to received calls like this:
var myData = Substitute.For<IData>();
...
myData
.Add(Arg.Is<MyEntity>(a =>
a.Active == true
&& a.Field1 == 1
&& a.Field2 == 42))
.Received(1);
And I was getting the error:
NSubstitute extension methods like
.Received()
can only be called on objects created usingSubstitute.For()
and related methods.
I was confident that I had declared it correctly, a few lines above… I could, in fact see that I had declared it correctly. As my brain slowly dribbled from my nose, I did a quick search on the web and found a solitary article that suggested I might have confused the Received and method calls; the correct syntax being:
myData
.Received(1)
.Add(Arg.Is<MyEntity>(a =>
a.Active == true
&& a.Field1 == 1
&& a.Field2 == 42));
Hopefully, now that I’ve doubled the available resources available to people finding this error, it will plague me less in compensation.
Published at DZone with permission of Paul Michaels, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.
Comments