Any software testing is like "Proof By Example", not only unit testing using a tool like JUnit. And that is not new wisdom, there is a quote from Dijkstra from 1960, which says essentially the same:
"Testing shows the presence, not the absence of bugs"
(just replace the words "shows" by "proofs"). However, this is also true for tools which generate random test data. The number of possible inputs for a real-world function is typically bigger by orders of magnitudes than the number of test cases one can produce and verify against an expected result within the age of the universe, independently from the method of generating those cases, so even if one uses a generator tool for producing lots of test data, there is no guarantee not to miss the one test case which could have detected a certain bug.
Random tests may sometimes reveal a bug which was overlooked by manually created test cases. But in general, it is more efficient to carefully craft tests to the function to be tested, and make sure one gets a full code and branch coverage with as few test cases as possible. Sometimes it is a feasible strategy to combine manually and random generated tests. Moreover, when using random tests, one has to take care to get the results in a reproducible manner.
So manually created tests are in no way worse than randomly generated tests, often quite the opposite.