Testing private method of an abstract class using Reflection
How can I test a private method of an abstract class using reflection (using C#)? I am specifically interested in adapting the code found in this thread.
I am aware of the dis开发者_如何学编程cussion around the principle of testing private codes in the first place (one should not in general !!). I have already decided to do that for my situation because of various reasons, so let's not repeat those discussions. Other SO threads (like Q# 1583363 and 1506427) discuss them in detail. Thanks.
By definition, and abstract class cannot be instantiated, so you can't test it directly. You could use one of the mocking frameworks (like TypeMock. Otherwise, you'll need to create a concrete class that inherits from the abstract class, and use that for testing.
If your using VS2008 then it's as easy as right click your private method and selecting create unit test. VS will create a YourAbstractClass_Accessor class that will allow you to see and run that private method.
Note: No additional mocking framework necessary.
You can do this, this is not reflection though, might be help for somebody.
var concreteClass = new concreteClass();
var po = new PrivateObject(concreteClass, new PrivateType(typeof(AbstractClass)));
Object[] args = new object[] {...};
po.Invoke("PrivateMethod", args);
精彩评论