简体   繁体   中英

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 discussion 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);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM