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


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) 这样做有什么优点吗?


7549
2017-08-01 02:57


起源

如果使用骨架生成器,默认情况下,PHPUnit默认将它们放在同一名称空间中。但是,这是否表明这样做是最佳做法是另一回事。 - GordonM


答案:


将测试放在与被测试的类相同的命名空间中是否合适?

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

这样做有什么优点吗?

似乎有。

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

use Acme\SomeBundle\Tests\Service

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

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


9
2017-08-01 08:23



此外,使用相同的命名空间进行测试可以更轻松地模拟php的内部函数,如time()和stuff - Chris


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


4