Есть такое слово, Cohesion, т.е. связи между сущностями. Если это слово применить к файловой структуре, можно сказать так –принципы по которым объединяются сущности в файловой системе. Например ручки можно сложить по цвету, или по типу (гелевая/шариковая).
Так вот, в разработке тоже самое. Можно тесты хранить рядом с файлами, потому что они имеют прямое отношение к конкретной сущности. Можно и наоборот, хранить вне исходника приложения, потому что иногда считается что тесты это не код приложения, а прикладной код, который запускается только на этапе разработки, и делать ему рядом с кодом самого приложения нечего.
На самом деле точек зрения больше.
Просто в зависимости от идеи, можно хранить код в разных местах.
Лично я предпочитаю именно вариант №1, потому что так и удобнее с позиции разработки (не надо лазить по файловой структуре, всё в одном месте), да и тесты неразделимы с разработкой (это часть разработки), в том числе документация решения, поэтому для меня это одно целое, поэтому я храню их вместе.
Так вот, поэтому иногда есть разделение:
app – код приложения
test – код тестов
...море других папок (support/env/static/assets, и так далее).