title: How to pass more than 4 arguments to FakeItEasy Invokes()?
body: <p>I am trying to convert a helper method I wrote mocking <code>ILogger</code> using Moq to FakeItEasy.  The <code>Log()</code> method mocked in the <code>ILogger</code> requires 5 arguments.</p>
  
  <pre><code>Log(LogLevel, EventId, FormattedLogValues, Exception, Func&lt;object, Exception, string&gt;)
  </code></pre>
  
  <p>It appears that FakeItEasy has capped the number of arguments to 4. (From the <a href="https://fakeiteasy.readthedocs.io/en/stable/invoking-custom-code/" rel="nofollow noreferrer">docs</a>):</p>
  
  <pre><code>// Pass up to 4 original call argument values into the method that creates the exception.
  A.CallTo(()=&gt;fakeShop.NumberOfSweetsSoldOn(A&lt;DateTime&gt;._))
    .Invokes((DateTime when) =&gt; System.Console.Out.WriteLine("showing sweet sales for " + when))
    .Returns(17);
  </code></pre>
  
  <p>Therefore when I write this code...</p>
  
  <pre><code>var logs = new List&lt;string&gt;();
  var logger = A.Fake&lt;ILogger&lt;ElasticSearchRepository&gt;&gt;();
  A.CallTo(() =&gt; logger.Log(A&lt;LogLevel&gt;._, A&lt;EventId&gt;._, A&lt;FormattedLogValues&gt;._, A&lt;Exception&gt;._, A&lt;Func&lt;object, Exception, string&gt;&gt;._))
      .Invokes((LogLevel a, EventId b, FormattedLogValues x, Exception c, Func&lt;object, Exception, string&gt; d) =&gt; logs.Add(x.ToString()));
  </code></pre>
  
  <p>... I get the following error</p>
  
  <pre><code> Delegate 'Action&lt;IFakeObjectCall&gt;' does not take 5 arguments
  </code></pre>
  
  <p>Is there something I should be doing differently?  It's hard to imagine anyone arbitrarily picking 4 as the max arguments that can be passed so I'm guessing there is a reason.  Moq's <code>Callback()</code> doesn't have the same limitations.</p>