Don't test private implementation, because that ties your implementation down. It leads to fragile tests.
You may feel a need to test something internal. That's a good indication that it need to be made public in some way. It could indicate that there's another class inside trying to get out. You can extract it and test it, then trust that it works.