Controlling Non-Public Methods Behavior Based on the Argument Value
You can control a fake Non public method's behavior based on call arguments by requiring all arguments to match the arguments used in the WhenCalled statement.
Syntax
C# Isolate.NonPublic.WhenCalled(() => <method>).WithExactArguments(<Args_list>).<behavior>;
VB
Isolate.NonPublic.WhenCalled(Function() <method>).WithExactArguments(<Args_list>).<behavior>
Sample:
The following sample shows how to fake the method's return value as follows:
• The return value of MethodReturnInt is set to 10 only when the arguments are "typemock" and 1.
• The return value of MethodReturnInt is set to 50 only when the arguments are "unit tests" and 2.
C# [TestMethod, Isolated] public void FakeNonPublicMethod_BasedOn_ExactMethodArgs() { // As we dont need to fake the object only its method we can use a live object. var liveDependency = new Dependency(); Isolate.NonPublic.WhenCalled(liveDependency, "MethodReturnInt").WithExactArguments("typemock", 1).WillReturn(10); Isolate.NonPublic.WhenCalled(liveDependency, "MethodReturnInt").WithExactArguments("unit tests", 2).WillReturn(50); var result = new Tested().SimpleCalculation(liveDependency); Assert.AreEqual(60, result); } public class Tested { public int SimpleCalculation(Dependency dependency) { return dependency.CallPrivate("typemock", 1) + dependency.CallPrivate("unit tests", 2); } } public class Dependency { private int MethodReturnInt(string p, int p_2) { throw new NotImplementedException(); } public int CallPrivate(string p, int p_2) { return MethodReturnInt(p, p_2); } }
VB <TestMethod(), Isolated()> _ Public Sub FakeNonPublicMethod_BasedOn_ExactMethodArgs() ' As we dont need to fake the object only its method we can use a live object. Dim liveDependency = New Dependency() Isolate.NonPublic.WhenCalled(liveDependency, "MethodReturnInt").WithExactArguments("typemock", 1).WillReturn(10) Isolate.NonPublic.WhenCalled(liveDependency, "MethodReturnInt").WithExactArguments("unit tests", 2).WillReturn(50) Dim result = New Tested().SimpleCalculation(liveDependency) Assert.AreEqual(60, result) End Sub Public Class Tested Public Function SimpleCalculation(dependency As Dependency) As Integer Return dependency.CallPrivate("typemock", 1) + dependency.CallPrivate("unit tests", 2) End Function End Class Public Class Dependency Private Function MethodReturnInt(p As String, p_2 As Integer) As Integer Throw New NotImplementedException() End Function Public Function CallPrivate(p As String, p_2 As Integer) As Integer Return MethodReturnInt(p, p_2) End Function End Class