可执行要求,PHPUnit和Jenkins策略

时间:2015-01-05 14:16:23

标签: jenkins phpunit tdd

我们在开发中使用Jenkins和PHPUnit。很长一段时间,我想开始在我们的团队中使用可执行要求。架构师/团队负责人/定义需求的人可以在实际代码之前编写测试。然后,实际代码应由另一个团队成员编写。因此,可执行需求测试在实际代码生成之前提交到存储库,Jenkins重建项目并且正确地失败。并且项目仍然处于失败状态,直到新代码被编写为违反XP规则以始终保持项目处于良好状态。

有没有办法告诉PHPUnit这样的测试不应该在Jenkins下运行,而它们可以由任何开发人员轻松地在本地执行?调整phpunit.xml并不是理想的:测试的本地更改更好,因为它们更容易跟踪。

我们尝试了markTestIncomplete()和markTestSkipped(),但它们并没有真正做到我们需要的:可执行要求测试真的很完整,不应该被跳过。使用这些函数可以防止在开发过程中轻松执行此类测试。

在我们的案例中,最好的方法是让PHPUnit选项像-do-not-run-requirements,它应该由Jenkins执行的PHPUnit使用。在开发机器上,不应使用此选项,并且实际可执行要求测试应在开头具有@executableRequirements元注释(仅在创建和测试实际代码后删除)。问题是PHPUnit没有这样的功能。

可能有更好的方法来实现可执行要求的实现而Jenkins中没有“错误”失败吗?

3 个答案:

答案 0 :(得分:1)

使用PHPUnit,可以过滤测试以执行。使用@group注释注释不应在一个环境中执行的测试,然后使用PHPUnit的XML配置文件的--exclude-group <name-of-group><group>元素或{{1}命令行选项。这两种方法都包含在文档中。

答案 1 :(得分:0)

  

很长一段时间我都想开始在我们的测试中使用测试驱动开发   球队。在实际代码之前,我没有看到编写测试的任何问题。

这是 TDD。

引用wikipedia

  

首先,开发人员编写了一个(最初失败的)自动化测试用例   定义了所需的改进或新功能,然后生成   通过该测试的最小代码量,...

以单数形式注意test case

话虽如此,非常欢迎您定义自己的开发方法,其中一位开发人员以复数形式编写 tests ,将其提交给版本控制,另一位开发人员编写代码以满足测试。

解决您的困境的方法是将测试提交给分支机构,其他开发人员在该分支机构中工作。一旦所有测试都通过,与trunk合并,Jenkins将看到整个批次,并就测试是否通过发表意见。

请勿将其称为TDD。

答案 2 :(得分:0)

我认为在没有任何基本框架的情况下编写测试在实践中不是很直接。因此,通过测试的最小代码量为&#39;你建议的做法并不是一个坏主意。

不一定是TDD方法 - 谁写了测试?如果有人使用需求或QA成员编写测试,您可能只需编写空测试(因此他们不会失败)。这种方法将确保开发人员将涵盖对方所考虑的所有案例。示例测试方法是public void testThatObjectUnderTestReturnsXWhenACondition, public void testThatObjectUnderTestReturnsZWhenBCondition。 (我喜欢冗长的描述性名称,因此不会混淆我在想什么,或者您可以使用注释来描述您的测试)。 DEV可以编写代码并完成测试,或者让其他人稍后完成测试。说明这一点的另一种方法是编写可执行要求。请参阅Cucumber / Steak / JBehave作为可执行要求工具。

如上所述,我们需要区分您是在尝试编写可执行要求还是单元/集成/验收测试。

如果您想编写可执行文件要求,任何人都可以编写它并且可以为空以阻止它们失败。 DEV将填充它并确保满足要求。我的意见是让DEV使用TDD(实际TDD)处理单元/集成/验收测试,而不是将编写代码的责任与他们编写的代码的相应单元/集成/验收测试分开。