使用PHPUnit进行单元和功能测试的文件系统/目录布局

Dal*_*vić 5 php integration layout phpunit

我需要在我的测试套件中添加集成测试.虽然名称是PHPUnit,但我发现在这里运行非单元测试有很多支持.我的布局是这样的:

<root>
    lib/
        Foo/
            Component.php
    tests/
        lib/
            Foo/
                ComponentTest.php
        resources/
            fixtures/
Run Code Online (Sandbox Code Playgroud)

(我认为)有三种方法可以在这里添加高于单位水平的测试:

添加并行结构

<root>
    tests/
        unit/
            lib/
                Foo/
                    ComponentTest.php
        integration/
            lib/
                Foo/
                    ComponentTest.php
        resources/
            fixtures/
Run Code Online (Sandbox Code Playgroud)

这应该有效,除非现在没有1:1类:测试类关系可能(并且可能会)混淆Netbeans.

添加 <root>/tests/lib/Foo/ComponentIntegrationTest.php

与上面相同的问题,目录较少.

将测试添加到现有测试类,使用符号表示 @group integration

这保持了1:1的关系,但却增加了测试套件的复杂性.此外,由于需要在不断变化的环境中调用SUT,我不能只重用单元测试中的_setup().

想法?

Dav*_*ess 6

单元测试用于单独测试单个单元(类).集成测试旨在将多个单元一起测试.因此,类和它们所属的集成测试之间可能不会有1:1的相关性.

我将创建一个单独的目录结构 - 甚至可能是一个单独的项目 - 来容纳集成测试.NetBeans将无法打开"测试"是一类属于,因为它会属于多个测试,但它继续开放其匹配的单元测试.

我们使用Selenium为我们的集成测试(在我到达之前称为健全性测试)有一个单独的项目,到目前为止它运行良好.

更新

我们的集成测试的目录布局非常简单:每个站点一个目录.我们为站点提供了一个代码库,并使用视图来允许单个站点覆盖布局(不仅仅是换肤).我们没有像我想的那样在这些测试上花费太多时间.我们使用Selenium在将站点推送到临时服务器后运行测试.我还没有机会将它们连接到我们的持续集成服务器(Jenkins),但那将是理想的.

我建议您在网站上按功能区或模块进行组织.大多数情况下,这取决于您如何看待您正在测试的项目.示例可能如下所示:

src/
    Model/
        Cart.php
    ...
tests/
    unit/
        phpunit.xml
        bootstrap.php
        Model/
            CartTest.php
        ...
    integration/
        account/
            login/
            register/
            subscriptions/
        products/
            listing/
            details/
            search/
        cart/
            shop/
            checkout/
Run Code Online (Sandbox Code Playgroud)