当前位置: 首页 > 知识库问答 >
问题:

如何强制PHPUnit在跳过的测试中失败?

濮阳鸿卓
2023-03-14

我正在尝试使用PHPUnit和Selenium与headless firefox建立一个自动测试。Travis CI尝试运行我的测试时,Selenium server无法启动,但我的测试被认为正常,因为PHPUnit将其标记为跳过:

The Selenium Server is not active on host localhost at port 4444.
OK, but incomplete, skipped, or risky tests!
Tests: 1, Assertions: 0, Skipped: 1.
The command "make test" exited with 0.

在我看来,当测试因为内部错误而无法启动时,应该认为它失败了。这真的很愚蠢,因为我的测试可能会以这种方式失败,如果没有阅读完整的报告,我可以相信事实上一切都正常运行,因为Travis CI认为返回值0是成功的测试。

当有跳过的测试时,是否有选项使PHPUnit返回非零结果?或者甚至让它直接报告Selenium错误测试失败?

共有2个答案

谯英彦
2023-03-14

经过所有的研究,我必须得出结论,PHPUnit(至少从7.3版开始)返回0,即使有跳过的测试,也不能强制使用任何可用的配置选项执行其他操作。

这意味着,当您的测试套件中的测试因任何原因甚至无法启动时,PHPUnit仍然会返回0作为整个测试会话的结果,并且被Travis CI视为SUCCESS。它将在构建历史记录中显示为绿色,找出发生了什么的唯一方法是打开日志并通读它。这样,您可能很容易最终部署带有错误的代码,除非您在部署前阅读整个构建日志并调查可能的问题。

如果有人证明我错了,我会删除这个答案。或者当PHPUnit作者解决这个问题时。

那一刻我搬到了朱尼特。

牛景同
2023-03-14

考虑在phpunit.xml文件中配置以下参数。

     stopOnError="true"
     stopOnFailure="true"
     stopOnIncomplete="true"
     stopOnSkipped="true"
     stopOnRisky="true"

参考文献

如果您想使用命令行args等效项是:

  --stop-on-error             Stop execution upon first error.
  --stop-on-failure           Stop execution upon first error or failure.
  --stop-on-warning           Stop execution upon first warning.
  --stop-on-risky             Stop execution upon first risky test.
  --stop-on-skipped           Stop execution upon first skipped test.
  --stop-on-incomplete        Stop execution upon first incomplete test.

对于你的情况,你想停止跳过。

旁注:要将测试视为失败,必须存在失败的断言。由于跳过的测试没有实际执行,因此不能将其视为失败,您应该依赖执行摘要,并确保没有发生风险测试或跳过的测试。

如果希望将风险测试和警告测试视为失败测试,可以使用以下参数:

  --fail-on-warning           Treat tests with warnings as failures.
  --fail-on-risky             Treat risky tests as failures.

参考文献

如果出于任何原因,您想让PHPUnit返回0以外的退出代码(成功),请考虑查看如何让PHPUnit在警告时返回非零退出状态

 类似资料:
  • 问题内容: 我正在使用Jenkins,Python,Selenium2(webdriver)和Py.test框架为网络测试创建测试用例。 到目前为止,我正在按照以下结构组织测试: 每个 类 是 测试用例 ,每个 方法是一个 测试步骤 。 当一切正常时,此设置非常有用,但是当一个步骤崩溃时,其余的“测试步骤”就会发疯。我可以借助来将故障包含在类(测试用例)中,但是我正在研究如何改进它。 我需要的是,

  • 我有一个构建项目,在其中我实现了Cucumber BDD,并编写了功能文件和测试类。现在,我想要的是在构建过程中

  • 我正在尝试从我的测试套件中运行所有测试,但是当我运行命令时,PHPUnit没有找到测试。我在phpunit中配置testsuite。xml。 phpunit。xml 独自创立php WebTestCase。php TestPage.php 如果我通过文件测试运行phpunit,则为,可以。

  • 我想在我的项目中测试特定的测试类,因为有很多测试类失败,我只想一次测试一个类。 我在以下文件夹中创建了测试类: 因此,我尝试了以下命令,但均无效: = 有什么帮助吗?谢谢

  • 我正在使用Spring 3.1.0。发布和JUnit 4.8.1.我很难弄清楚为什么类的成员字段在JUnit测试中没有自动生成。我的测试看起来像... 类"EventFeed"调用以下类的实例... 但当它出现时,AbstractEventParser的“netUtilsService”成员字段为空。这很奇怪,因为在我的“testApplicationContext.xml”文件中,我有这个,我认

  • 问题内容: 我正在使用 Junit 通过 Seleniun WebDriver 运行测试。我试图将测试分成功能区域,以更好地报告错误。我创建了测试以测试页面加载/将文档移动到其他工作流程。如果页面加载测试失败,或者工作流移动失败,我想跳过后续的页面/工作流测试。 如果测试A失败,如何跳过班级中的其余测试或在班级B中运行测试? 注意: 我意识到我要问的是“ UNIT TESTS的 不良实践* 。但是