Faking Ref and Out Parameters

To return Ref and Out parameters, set the value of these arguments before faking the call to the method.

When to Use

You can fake Ref and Out parameters when your test requires a specific return value from them.

Syntax

C#

var outValue = <value>;
Isolate.WhenCalled(() => fake.SomeMethod(ref outValue)).<behavior>

VB

Dim outValue = <value>
Isolate.WhenCalled(Function fake.SomeMethod(outValue)).<behavior>

Samples

The following sample shows how to fake the first and second parameter of SomeMethod() as follows:

Required return values are assigned to the variables.

The variables are passed to the fake method in Isolate.WhenCalled().

C#

[TestMethod, Isolated]
public void RefArgument_Example()
{
  string outStr = "typemock";
  List<int> outList = new List<int>() { 100 };
  var fake = new Dependency();
  Isolate.WhenCalled(() => fake.SomeMethod(ref outStr, out outList)).IgnoreCall();

  var result = new ClassUnderTest().GetString(fake);

  Assert.AreEqual("typemock1", result);
}

public class ClassUnderTest
{
  public string GetString(Dependency dependency)
  {
    var name = "unit testing";
    List<int> list;
    dependency.SomeMethod(ref name, out list);

    return name + list.Count.ToString();
  }
}

public class Dependency
{
  public virtual void SomeMethod(ref string name, out List<int> list)
  {
    throw new NotImplementedException();
  }
}

VB

<TestMethod, Isolated>
Public Sub RefArgument_Example()
    Dim outStr As String = "typemock"
    Dim outList As New List(Of Integer)() From {100}
    Dim fake = New Dependency()
	
    Isolate.WhenCalled(Sub() fake.SomeMethod(outStr, outList)).IgnoreCall()

    Dim result = New ClassUnderTest().GetString(fake)

    Assert.AreEqual("typemock1", result)
End Sub


Public Class ClassUnderTest
    Public Function GetString(dependency As Dependency) As String
        Dim name = "unit testing"
        Dim list As List(Of Integer)
        dependency.SomeMethod(name, list)

        Return name + list.Count.ToString()
    End Function
End Class

Public Class Dependency
    Public Overridable Sub SomeMethod(ByRef name As String, ByRef list As List(Of Integer))
        Throw New NotImplementedException()
    End Sub
End Class