Creating an Object with Private Constructor

Using the Non-Public API, you can create a real object despite the fact that the type or its constructor isn't visible

When to Use

When you need to create a real object to test, where the constructor is not visible or the type is not visible

if using non-generic API resulting instance in the test will have type 'object'. For setting behavior on it use Isolate.NonPublic API or by casting to visible base class if this is permissible.

Syntax

C#

Isolate.NonPublic.CreateInstance<Class>();
Isolate.NonPublic.CreateInstance(type);

VB

Isolate.NonPublic.CreateInstance(Of Class)()
Isolate.NonPublic.CreateInstance(type)

Sample

C#

public class ClassUnderTest
{
  public bool ConstructorWasCalled = false;

  private ClassUnderTest()
  {
    ConstructorWasCalled = true;
  }
}

[TestMethod]
public void CreateInstanceWithPrivateCounstructor()
{
  var fake = Isolate.NonPublic.CreateInstance<ClassUnderTest>();

  Assert.IsTrue(fake.ConstructorWasCalled);
}  

VB

Public Class ClassUnderTest
    Public ConstructorWasCalled As Boolean = False

    Private Sub New()
        ConstructorWasCalled = True
    End Sub
End Class

<TestMethod(), Isolated()>
Public Sub CreateInstanceWithPrivateCounstructor()
        Dim fake = Isolate.NonPublic.CreateInstance(Of ClassUnderTest)()

        Assert.IsTrue(fake.ConstructorWasCalled)
    End Sub