【问题标题】:phpunit xml sequential testing issuephpunit xml顺序测试问题
【发布时间】:2018-06-28 00:48:43
【问题描述】:

我在运行测试套件时遇到问题,我需要先运行 OperatorUserTest.php 来设置用户权限,我希望我能做这样的事情

 <testsuite name="Operator Test Suite">
        <file>./tests/Users/OperatorUserTest.php</file>
        <directory>./tests/Projects</directory>
        <directory>./tests/Operators/UnitTesting</directory>

    </testsuite>

但是由于某种原因,文件没有完全运行,并且在完成之前调用了操作符/UnitTesting 目录,因此出现上述错误。下面的代码运行良好。

  <testsuite name="Operator Test Suite">
        <directory>./tests/Users</directory>
        <exclude>
            <file>./tests/Users/UserTest.php</file>
        </exclude>
        <directory>./tests/Projects</directory>
        <directory>./tests/Operators/UnitTesting</directory>

    </testsuite>

我先使用该文件有什么问题吗?谢谢

【问题讨论】:

    标签: php laravel phpunit


    【解决方案1】:

    我假设这些权限存储在数据库中,这是否正确?

    如果您需要在每次测试之前执行一项任务,即在数据库表中填充用户的权限,您应该使用在每次测试之前运行的setup() 方法。

    Laravel 也为此提供了一些帮助程序。 RefreshDatabase trait 将分别在测试之前和之后运行迁移和回滚。

    然后您可以使用assertDatabaseHas 断言权限可用。

    【讨论】:

    • 嘿,是的,用户权限存储在数据库中。我有 6 个测试,我希望每次我可以先运行 OperatorUserTest.php 然后再运行测试,而不是设置用户权限,因此如果更改了用户权限,则可以在一个地方进行更改。它在使用目录并从上面的示例中排除其他目录时有效,但是当我尝试只调用它不调用的文件时,有什么想法可能是什么原因?
    • 那么您希望 OperatorUserTest 的权限在以下 6 个测试中使用吗?
    • 是的,权限相同
    • 所以你当然可以这样做,但是它违背了单元测试的基本原理之一,即测试之间的原子性。本质上,每个测试都应该从头开始,而不是使用先前测试的数据或状态。出于这个原因,我建议在每次测试之前重新创建权限
    • 啊,它本质上是一个测试,但有很多测试路线,所以我们将它们分开以提高可读性。你知道为什么如果文件被调用,目录在它完成之前被调用吗?如果我们使用 OperaorUserTest 调用目录并排除其他文件,它工作正常,找不到原因。谢谢
    猜你喜欢
    • 2019-04-21
    • 2017-09-25
    • 2019-11-22
    • 2010-09-05
    • 2012-03-10
    • 2014-05-15
    • 1970-01-01
    • 2021-02-08
    相关资源
    最近更新 更多