PHP单元测试:测试应该在与类相同的命名空间下吗?

时间:2012-08-01 02:57:16

标签: php namespaces phpunit

Symfony 2.0 bundle目录结构通常有一个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;

现在,这没问题。

然而,顺便说一下,我使用Netbeans IDE,它找不到测试类,除非它在同一名称空间下(当你只想测试一个文件时这是值得注意的)。嗯,这可能只是一个Netbeans标准(或其他)。

无论如何,将测试放在与被测试的类相同的命名空间中是否合适?这样做有什么好处吗?

问题

1)将测试置于与被测试类相同的命名空间是否合适?

2)这样做有什么好处吗?

2 个答案:

答案 0 :(得分:11)

将测试置于与被测试类相同的命名空间是否合适?

到目前为止,关于这一点没有任何问题。所以,这或许只是个人偏好,现在。

这样做是否有任何优点?

似乎有。

1)由于测试和类将共享相同的命名空间,因此不需要

use Acme\SomeBundle\Tests\Service

在测试课程中。换句话说,创建一个与该类共享相同名称空间的测试稍微方便一些。

2)如果您使用的是NetBeans,那么您将能够使用IDE在单个类上运行测试。

答案 1 :(得分:4)

在Bundles中,这样你得到的包也会有所有的测试,所以你可以运行它们。这与Symfony组件相同,因为它们也是自包含的包。主要取决于你的风格。另一种常见模式如github.com/vandpibe/security