unit tests are important, but even passing all unit tests doesn't mean your program is correct - even if you did think of everything. The whole is more than the sum of its parts. To make an analogy, to find out whether a house you are going to be is structually safe, it isn't sufficient to test each brick, pillar and beam. If you dismantle a safely build house, and use the parts (who each pass their "unit" test) to build a new house, it's still possible for the new house to collapse.
That's the same with software. While a unit test can show a program has defects, it can't show the absence of all defects (and for more fundamental reasons than "not thinking about certain cases").