How do you unit test private methods?

前端 未结 30 1845
无人及你
无人及你 2020-11-22 06:44

I\'m building a class library that will have some public & private methods. I want to be able to unit test the private methods (mostly while developing, but also it coul

30条回答
  •  萌比男神i
    2020-11-22 07:30

    Private types, internals and private members are so because of some reason, and often you don’t want to mess with them directly. And if you do, chances are that you’ll break later, because there is no guarantee that the guys who created those assemblies will keep the private/internal implementations as such.

    But ,at times, when doing some hacks/exploration of compiled or third party assemblies, I have myself ended up wanting to initialize a private class or a class with a private or internal constructor. Or, at times, when dealing with pre-compiled legacy libraries that I can’t change - I end up writing some tests against a private method.

    Thus born the AccessPrivateWrapper - http://amazedsaint.blogspot.com/2010/05/accessprivatewrapper-c-40-dynamic.html - it's is a quick wrapper class that’ll make the job easy using C# 4.0 dynamic features and reflection.

    You can create internal/private types like

        //Note that the wrapper is dynamic
        dynamic wrapper = AccessPrivateWrapper.FromType
            (typeof(SomeKnownClass).Assembly,"ClassWithPrivateConstructor");
    
        //Access the private members
        wrapper.PrivateMethodInPrivateClass();
    

提交回复
热议问题