1. It is the method of isolating the smallest possible components of the written software code and then testing each of them individually to see if there are any errors in the coding.
2. To be able to quickly test all code, perhaps many times over, with many rounds of refactoring, and see the exact same passing results you had prior to the refactoring. All tests should pass or the refactoring has very likely introduced one or more errors.
3. Observation and understanding of the test results is easier. Also, the specific test conditions are easier to create as you work from individual units tests to the next level that relies on the unit tests, and then to full integration testing.