We programmers are obsessive by nature. But I often get frustrated with the depth of our obsession over things like code coverage. Unit testing and code coverage are good things. But perfectly executed code coverage doesn't mean users will use your program. Or that it's even worth using in the first place. When users can't figure out how to use your app, when users pass over your app in favor of something easier or simpler to use, that's the ultimate unit test failure. That's the problem you should be trying to solve.
I want to run up to my fellow programmers and physically shake them: think bigger!
But it may be helpful to understand that
Assert.AreNotEqual(UserInterface.UserFriendliness, UnitTest.Purpose);
Assert.AreEqual(Spec.Correctness, UnitTest.Purpose);