Как правильно писать unit тесты?
Обычно есть mock-и и stub-ы для задач именно юнит-тестирования. 
Да, это очень похоже на интеграционное, впрочем, оно не критично отличается от юнит, так что большой проблемы тут не вижу.
В интернете пишут, что тестируемый метод нужно всегда изолировать от любых зависимостей, иначе тестируемый метод в процессе своего выполнения подтянет внешние методы этого же или другого класса, что противоречит юнит-тестированию, так как в таком случае будет тестироваться не одна сущность, а взаимодействие между несколькими сущностями. 
Верно ли это утверждение?
Я считаю в целом верно. Что бы эту  решить проблему придумали дубли (вот гугл на русском показал).
Т.е если писать чистый юнит-тест для LoginForm, то оптимальным решением на мой взгляд заменить на "моки":
 -  YII:$app->:$app->user, который вернет для  Yii::$app->user->login()false
 - app\models\User , который вернет для User::findByUsername()null
К сожалению, с YII не работаю и поэтому более детальною реализацию подобного сейчас написать не могу.Можно ли это назвать юнит-тестированием или это всё же интеграционное тестирование?
 И если да, то нормально ли сваливать всё в одну директорию и юнит тесты и интеграционные? Где грань.
Грань определяет разработчик, его команда и методологии какими они пользуются.
Например если писать сначала тесты, а потом реализовывать функционал, то они выглядят чище и похожи на юнит-тесты.
Если же писать сначала код, а потом его покрывать тестами они уже больше похожи на интеграционные, как вы говорите. Собственно так и есть в вашем примере. 
Я лично для себя пришел к выводу что подобная теоретическая мишура мне мешает и я  не выделяю тесты на такие категории. Для себя я выделяю тесты которые тестируют бизнес-логику приложения и тесты (спецификации) для кода.