title: Using NSubstitute to check a single optional argument
body: <p>Is there a way to check a single value passed to an NSubstitute fake, without having to specify the other values?</p>
  
  <p>Image a method with several optional arguments:</p>
  
  <pre><code>void myMethod(int a=0, int b=0, int c=0);
  </code></pre>
  
  <p>I'd like to be able to confirm a specific value is passed to one of the parameters, without having to specify the other parameters:</p>
  
  <pre><code>fake.Received().myMethod(b: Arg.Is(1));
  </code></pre>
  
  <p>and have this verify calls regardless of whether <strong>a</strong> or <strong>b</strong> are passed.</p>
  
  <p>This works: </p>
  
  <pre><code>fake.Received().myMethod(a: Arg.Any&lt;int&gt;(), b: Arg.Is(1), c: Arg.Any&lt;int&gt;())
  </code></pre>
  
  <p>but is not very readable, since the non-relevant arguments clutter the test, and will break if another argument is added to <code>method</code>.</p>
  
  <p>However, this will ignore method calls that do not pass default values to the optional parameters:</p>
  
  <pre><code>NSubstitute.Exceptions.ReceivedCallsException : Expected to receive a call matching:
  myMethod(0, 1, 0)
  Actually received no matching calls.
  Received 1 non-matching call (non-matching arguments indicated with '*' characters):
  myMethod(*2*, 1, 0)
  </code></pre>
  
  <p>And using <code>ReceivedWithAnyArgs</code> will cause the Arg.Is() to be ignored, creating a test that passes regardless of the value of <strong>b</strong>.</p>
  
  <p>Finally, I tried arranging the fake to capture the value:</p>
  
  <pre><code>fake.method(b: Arg.Do&lt;int&gt;(i =&gt; captureValue = i));
  </code></pre>
  
  <p>But this is not hit unless the signature is matched exactly.  I'm looking for a way to test a single value without having to rewrite a large number of tests when an optional parameter is added to a method.</p>
  
  <p>Note: This example uses <code>int</code> values, but the same issue occurs with reference types.</p>
  
  <p>And a note to the maintainer: I would expect Arg.Is to override ReceivedWithAnyArgs, if that is a feasable modification.  This would allow creating minimally specified tests.</p>