There are many different kinds of software tests, and no one is better than any other. Each method approaches the code from a different direction and will catch a different class of faults. All are needed.
The term unit test is commonly used to mean testing a module of code (say a library, device driver, or protocol stack layer), but it really describes the testing of atomic units: each class or function.
Unit testing is performed in strict isolation. Any untrusted external code with which the unit interfaces is replaced with a stub or simulator—this ensures that you only trap bugs in this unit, not bugs caused by outside influences.
A step up from unit testing, this validates the combination of one ...