Search code examples
c#mstest

Testing a private field using MSTest


Is it possible to get access to a private field in a unit test?


Solution

  • The way to get private fields or methods in general is to use Reflection. However, the unit test framework includes a helper class, PrivateObject, to make this easier. See the docs. In general, when I've used this, I've ended up making an extension methods like the following:

    public static int GetPrivateField(this MyObject obj)
    {
      PrivateObject po = new PrivateObject(obj);
      return (int)po.GetField("_privateIntField");
    }
    

    If you need to get private fields in a static class, however, you will need to go with straight up reflection.