today some notices of what is considered to be a good unit test.
1. Tests should be independent and isolated.
For example if you have functions a, b, c tested, then sequence of test shouldn't affect the result.
2. Each test should test single behaviour or logical staff.
If to speak about phone example, calling and sending sms shouldn't be in one functoin
3. Clear purpose understood.
4. Don't test the compiler ( like writing/reading to db )
5. Reliable and repetable ( give the same result ).
6. Quality the same as other parts of solution.
7. Valuable for developers