Рефакторинг - это очень просто. Суть рефакторинга - в оптимизации кода без изменения его логики, другими словами - упрощение кода, улучшение его читаемости, вынесение повторяющегося кода в функции или классы итд. Тут вам поможет не книга, потому что нет книги по рефакторингу, а только опыт
Юнит-тестирование - покрытие тестами каждой функции в коде, что в общем-то ясно из самой фразы "юнит-тестоирование". Суть заключапется в том, что вы пишете класс, методы в нем, а потом пишете класс тестов где сохраняете имена классов и методов добавляя к ним приставку `Test`, например. А в целом зависит уже от документации того инструмента для тестов, который вы хотите использовать