I was sharing what I’d learned about unit testing private methods with some co-workers, and the idea of testing a private method of an abstract class was presented.
PrivateObject deals with this handily by allowing you to specify the type being tested in one of its constructors.
Here’s a simple example. Consider we have an abstract class, Mammal, and a derived class, Human.
public abstract class Mammal { private void SecretMammalStuff() { } } public class Human : Mammal { }
We can test Mammal’s private method by doing the following:
var human = new Human(); var po = new PrivateObject(human, new PrivateType(typeof(Mammal))); po.Invoke("SecretMammalStuff");
If we don’t specify the PrivateType argument in the PrivateObject constructor, we’re not able to access the base class’s private methods. This is the key to testing private methods in an abstract class.
Advertisements