Faking Dependencies

With a single method, Typemock Isolator creates an object and fakes all the dependencies in its constructor. This approach saves you time and lines of code. In addition, it creates a more robust test. If the constructor changes, dependencies are added or removed, the test remains the same.

If there are primitives, structs, or strings that are also accepted by the constructor, they are initialized to their base values.

 

When to Use

When you want to fake all arguments of the constructor.

Syntax

C#

T real = Isolate.Fake.Dependencies<T>()
Isolate.GetFake<F>(real);

VB

Dim real = Isolate.Fake.Dependencies(Of T)()
Isolate.GetFake(Of F)(real)

Samples

Sample 1: Faking All Dependencies of the Type

The following sample shows how to fake all dependencies of the type as follows:

      T real = Isolate.Fake.Dependencies<T>()

The constructor of T is called with automatically created faked objects as parameters for reference types and default values for value types. In the example, the call var real = Isolate.Fake.Dependencies<ClassUnderTest>() is equal to:

var dependency = Isolate.Fake.Instance<Dependency>();
var dependency2 = Isolate.Fake.Instance<Dependency2>();
var real = new ClassUnderTest(0, dependency, dependency2);

      var fake = Isolate.GetFake<F>(real)

Because faked objects that were transferred as parameters to the constructor were created automatically, there is no reference to these objects. The call will return an automatically created parameter object of type F. In the example, the call var fake = Isolate.GetFake<Dependency>(real) will return an automatically created faked object of type Dependency (dependency). This is required if you want to make some changes in the behavior of the dependency. For example:

var fake = Isolate.GetFake<Dependency>(real);
Isolate.WhenCalled(() => fake.SomeMethod()).WillReturn(3);

C#

[TestMethod]
public void FakeAllDependencies_ChangeBehavior()
{
  var real = Isolate.Fake.Dependencies<ClassUnderTest> ();
  var fake = Isolate.GetFake<Dependency> (real);
  Isolate.WhenCalled(() => fake.Multiplier).WillReturn(2);

  var result = real.Calculate(1, 2);
  Assert.AreEqual(6, result);
}
 
public class ClassUnderTest
{
  private int additional;
  private Dependency2 d2;
  private Dependency d1;

  public ClassUnderTest(int additional, Dependency2 d2, Dependency d1)
  {
      this.additional = additional;
      this.d2 = d2;
      this.d1 = d1;
  }

  public int Calculate(int a, int b)
  {
      d2.Check();
      return (a + b)*d1.Multiplier+additional;
  }
}

VB
<TestMethod()>
Public Sub FakeAllDependencies_ChangeBehavior()
    Dim real = Isolate.Fake.Dependencies(Of ClassUnderTest)()
    Dim fake = Isolate.GetFake(Of Dependency)(real)
    Isolate.WhenCalled(Function() fake.Multiplier).WillReturn(2)

    Dim result = real.Calculate(1, 2)
    Assert.AreEqual(6, result)
End Sub

Public Class ClassUnderTest
    Private additional As Integer
    Private d2 As Dependency2
    Private d1 As Dependency

    Public Sub New(additional As Integer, d2 As Dependency2, d1 As Dependency)
        Me.additional = additional
        Me.d2 = d2
        Me.d1 = d1
    End Sub

    Public Function Calculate(a As Integer, b As Integer) As Integer
        d2.Check()
        Return (a + b) * d1.Multiplier + additional
    End Function
End Class

Sample 2: Passing Specific Arguments to the Constructor

To pass arguments other than auto-fakes, pass them to the Fake.Dependencies() method. Typemock Isolator will try to match the type of the argument that you pass in the constructor and will swap them. This means that you do not need to enter the position of each argument, which protects you from heavy refactoring when changing the dependencies.

 You can set up a fake behavior before calling the constructor and then pass these fakes through Fake.Dependencies().

 

 To keep the interface simple, the Fake.Dependency() method works if the constructor does not accept multiple arguments of the same type (non-primitives or strings). If the constructor accepts multiple arguments of the same type, create fakes using the Fake.Instance() method and pass the arguments as an argument list.

C#

[TestMethod]
public void FakeAllDependencies_OverrideArguments()
{
  var realDependency = new Dependency();
  var real = Isolate.Fake.Dependencies<ClassUnderTest>(realDependency, 4);

  var result = real.Calculate(1, 2);
  Assert.AreEqual(4, result);
}

VB
<TestMethod()>
Public Sub FakeAllDependencies_OverrideArguments()
    Dim real = New Dependency()
    Dim fake = Isolate.Fake.Dependencies(Of ClassUnderTest)(real, 4)

    Dim result = fake.Calculate(1, 2)
    Assert.AreEqual(4, result)
End Sub