Тесты модулей PHP: должны ли тесты находиться под тем же пространством имен, что и класс?
Структура каталогов пакетов Symfony 2.0, как правило, имеет каталог Tests
, где должны быть размещены тесты.
Acme
-> SomeBundle
-> Controller
-> Entity
-> Service
-> ...
-> Tests
-> Controller
-> Entity
-> Service
-> ...
-> OtherBundle
-> ...
Я знаю, что тесты работают, даже если они не находятся под тем же пространством имен, что и те классы, которые они тестируют.
namespace Acme\SomeBundle\Service;
/**
* Some service.
*
* @author varchar
* @since August 1, 2012
*/
class SomeService
{
}
Для класса выше я (для одного) обычно имеет тест под следующим пространством имен (под влиянием структуры каталогов):
namespace Acme\SomeBundle\Tests\Service;
Теперь это работает нормально.
Кстати, однако, я использую IDE Netbeans, который не может найти тестовый класс, если он не находится под одним и тем же пространством имен (это примечательно, если вы хотите протестировать только один файл). Ну, это может быть просто стандарт Netbeans (или что-то еще).
Независимо, однако, целесообразно ли ставить тесты под тем же пространством имен, что и тестируемый класс? Есть ли какие-либо заслуги в этом?
Вопрос
1) Уместно ли ставить тесты под тем же пространством имен, что и тестируемый класс?
2) Есть ли какие-либо достоинства при этом?
Ответы
Ответ 1
Уместно ли ставить тесты под тем же пространством имен, что и тестируемый класс?
До сих пор об этом не было никаких проблем. Так что, возможно, это будет только личное предпочтение, пока.
Есть ли какие-либо достоинства в этом?
Кажется, что есть.
1) Поскольку тест и класс будут использовать одно и то же пространство имен, не нужно
use Acme\SomeBundle\Tests\Service
в тестовом классе. Другими словами, несколько легче создать тест, разделяющий те же пространства имен, что и класс.
2) Если вы используете NetBeans, вы сможете запустить тест на одном классе с помощью среды IDE.
Ответ 2
В Bundles это так, что пакет, который вы получите, будет иметь все тесты, чтобы вы могли их запускать. То же самое и с компонентами Symfony, потому что они также являются автономными пакетами. В основном это зависит от вашего стиля. Другой общий шаблон похож на github.com/vandpibe/security