I have a class that I am unit testing into with DUnit. It has a number of methods some public methods and private methods.
type
TAuth = class(TDataModule)
It is a little hacky, but I think this is the simplest and clearer approach. Use this conditional compilation directive:
{$IfNDef TEST}
private
{$EndIf}
Your unit test project must define TEST in project → conditional defines
. Without a visibility specification, they become published.
Beware: if the private visibility isn't the first one in the class declaration, it will get the previous definition. A safer way, but more verbose and less clear, would be:
private
{$IfDef TEST}
public
{$EndIf}
This has a lot of advantages over the subclassing or other approaches:
I think it is a clearer solution, and better than the selected answer.
When I use this, I also configure the test project to put the build objects in a different directory of the main project. This prevents the binaries with the TEST directive to mix with the other code.