A short one - and it's actually a tip I've picked up from a co-ninja in the office (much kudos due to @datoon83). When doing some work with unit tests, we've discovered an anti-pattern we've applied throughout our application, which is to hard-code messages into our source code.
The simple lesson - don't use string literals in your application code, use Resource files instead! There are plenty of examples where we've done it, things like exception descriptions, audit notes, user confirmation messages, etc.
The problem was highlighted beautifully when we were asserting against classes in legacy code that generated and saved away audit notes. We wanted to assert that the note was well formed with the correct identifiers and timestamps, so out comes Moq, and we simply dubugged the code, copyied the value we saw being passed into the mocked object, and pasted this into our test to safeguard it.
But lo and behold, someone comes along and fixes a spelling mistake, or re-formats a message, and even though our code still works fine, our tests are all breaking. After moving to Resource files, no more copy-and-pasting, no more brittle tests that need fixing every time someone re-words a user message, and for free we get internationalisation support. Awesomeness!