Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

An NSubstitute Extension Method Pitfall [Snippet]

DZone 's Guide to

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.

· Web Dev Zone ·
Free Resource

Not 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 using Substitute.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.

Topics:
web dev ,nsubstitute ,methods ,web application development

Published at DZone with permission of

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}