【问题标题】:PHP Unit Tests: should tests be under the same namespace as the class?PHP 单元测试:测试应该与类在同一个命名空间下吗?
【发布时间】:2012-07-29 22:03:39
【问题描述】:

传统上,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
{
}

对于上面的类,我(for one)通常会在以下命名空间(受目录结构影响)下进行测试:

namespace Acme\SomeBundle\Tests\Service;

现在,这可以正常工作了。

不过,顺便说一下,我使用的 Netbeans IDE 无法找到测试类,除非它位于同一命名空间下(这在您只想测试单个文件时很明显)。好吧,这可能只是一个 Netbeans 标准(或其他东西)。

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

问题

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

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

【问题讨论】:

  • 如果您使用骨架生成器,PHPUnit 似乎默认将它们放在同一个命名空间中。不过,这是否表明这样做是最佳做法是另一回事。

标签: php namespaces phpunit


【解决方案1】:

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

到目前为止,还没有这方面的问题。因此,目前这可能只是个人喜好问题。

这样做有什么好处吗?

好像有。

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

use Acme\SomeBundle\Tests\Service

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

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

【讨论】:

  • 另外,使用相同的命名空间进行测试可以更轻松地模拟 php 的内部函数,如 time() 和 stuff
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2010-12-20
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 2016-07-23
    相关资源
    最近更新 更多