【问题标题】:Organizing PHPUnit TestCases组织 PHPUnit 测试用例
【发布时间】:2015-04-15 06:10:55
【问题描述】:

我有一组需要使用管理用户运行的测试,还有一些需要使用非管理用户运行的测试。此外,通过其中一项测试在我的系统中注册了一个非管理用户。因此,我考虑将这个新注册的用户用于其他测试。

PHPUnit Manual 显示了一种按特定顺序执行测试的方法

<phpunit bootstrap="src/autoload.php">
  <testsuites>
    <testsuite name="money">
      <file>tests/FirstTest.php</file>
      <file>tests/SecondTest.php</file>
      <file>tests/ThirdTest.php</file>
      <file>tests/FourthTest.php</file>
    </testsuite>
  </testsuites>
</phpunit>

由于为每个新测试用例维护这个列表很烦人,我想指定测试用例,首先注册特定用户,然后是目录中的所有其他测试用例

<phpunit bootstrap="src/autoload.php">
  <testsuites>
    <testsuite name="money">
      <file>tests/RegistrationTest.php</file>
      <directory>tests</directory>
    </testsuite>
  </testsuites>
</phpunit>

不幸的是,一旦在配置文件中定义了一个 &lt;directory&gt;,PHPUnit 似乎就会忽略手动指定的命令。

有没有办法解决这个问题并首先从目录中运行特定的测试?

仅供参考,我正在使用 PHPUnit 4.5.0 版

【问题讨论】:

    标签: php testing phpunit


    【解决方案1】:

    测试应该相互独立,你不应该使用一个测试来设置另一个。

    您需要一些代码来准备每种测试所需的用户,并在需要时从 setUp 或 setUpBeforeClass 方法中使用它。每个测试都应该能够创建运行所需的数据。

    创建用户所需的代码可能是真实代码,在某些测试用例中进行了测试。没关系。测试可以使用真实的代码来设置环境。

    【讨论】:

    • 我知道让一些测试用例依赖于其他测试用例是非常糟糕的做法,但是由于注册过程非常复杂,而且我正在编写的测试不是与 PHP 代码本身交互,而是与前端,为每个测试创建一个新用户并在之后删除它是没有效率的。
    • 您的意思是测试功能正常,所以您真的在浏览您的网站?我也遇到过这个问题,并使用了我在回答中提出的方法:有一些辅助模块,它采用 Selenium 浏览器实例或您正在使用的任何东西并执行一些操作(登录、创建新用户等),所以真正的测试可以在该配置后启动。此外,如果出现问题,则应触发异常,因此测试将因错误而失败,而不是失败。
    猜你喜欢
    • 2012-01-08
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    • 2015-06-15
    • 2015-01-13
    • 2014-03-31
    相关资源
    最近更新 更多