The name of your test should consist of three parts:
AAA Pattern: Arrange, Act, Assert is a common pattern when unit testing.
The input to be used in a unit test should be the simplest possible in order to verify the behavior that you are currently testing.
Naming variables in unit tests is as important, if not more important, than naming variables in production code. Unit tests should not contain magic strings (hard coded strings).
When writing your unit tests avoid manual string concatenation and logical conditions such as if, while, for, switch, etc.
If you require a similar object or state for your tests, prefer a helper method than leveraging Setup and Teardown attributes if they exist.
When writing your tests, try to only include one Assert per test. Common approaches to using only one assert include:
When production code includes calls to static references it will be a problem because unit test will not have full control of the system under test.
To solve these problems, you'll need to introduce a seam into your production code. One approach is to wrap the code that you need to control in an interface and have the production code depend on that interface.