Public vs. private is not a useful distinction for what apis to call from your tests, nor is method vs. class. Most testable units are visible in one context, but hidden in others.
What matters is coverage and costs. You need to minimize costs while achieving coverage goals of your project (line, branch, path, block, method, class, equivalence class, use-case... whatever the team decides).
So use tools to ensure coverage, and design your tests to cause least costs(short and long-term).
Don't make tests more expensive than necessary.
If it's cheapest to only test public entry points do that.
If it's cheapest to test private methods, do that.
As you get more experienced, you will become better at predicting when it's worth refactoring to avoid long-term costs of test maintenance.