I second what others have said. (and James, feel free to speak for me anytime, you are a very sound person 😉 )
The main thing is that if your test fails and you can not quickly identify what the source of the failure is, your unit is doing too much. Break it into smaller pieces.
Notice I said unit, not a VI, not a class, not a library. A Unit.
We all define what that unit under test represents.
I like Roy Oshevore's definition of a unit as a unit of work.
I also like to think of my units as "features", I am testing a feature of my program. In some books, they say you are testing the behavior not the implementation.
If your feature/behavior is well defined and it only does one thing, then a test that fails would be straightforward to figure out.