I often find what I believe are good cases for using the "internal" access modifier on certain class members in C# for code readability and to prevent unintended usage. In .NET we usually write our unit tests in a separate unit test project. Problem is, class members marked as internal are not visible to the test project and can be cumbersome to test. I understand there are workarounds such as the "InternalsVisibleTo" attribute, reflection or Visual Studio generated "accessor" classes but I wonder if the goal can be achieved with a better OO design. Is it worth compromising testability by using internal class members, or do they provide enough benefit to justify their use? I've heard suggestions such as "just make it public", but I don't feel that's a trade-off I should have to make. Any opinions here?