Yeah. One of the key lessons I have learned about software testing is the idea of layered unit tests. A given unit test will often fail to find a significant problem so you get around this by having a bunch of low-level unit tests, followed by ever-increasing levels of tests which test how the various layers work together. You still won't find that critical bug that is discovered later because someone somewhere is doing something you aren't thinking of at the time, but it ultimately gives you a better understanding of the whole system.