Good point! But there are at least two methodologies for picking: white box and black box, this is especailly true with unit testing, and gets less true with system testing and user acceptance testing.
For unit testing, most of the time, it is a mixture of white box testing and black box testing. They have different focuses. Black box testing is used to ensure that the interfaces a module/function/procedure provide are correct as spec'd. But the white box testing come in to make sure that each line of code has its reason to exist and if it exists it is correct.
It also has something to do with our abilitity to define test cases. White box testing has more dependency on that ability, which just like any other ability human being possesses, is far from perfect ;-)