php - 获取 PHPUnit 的控制台输入

标签 php unit-testing phpunit

我希望在运行 PHPUnit 测试用例时提示输入,然后使用该输入作为测试的一部分。换句话说,我想对字段使用动态输入值。

我该怎么做?

最佳答案

简短回答:你不应该

长问句:你真的不应该这样做,因为它严重违反了goals of unittesting

虽然很容易echo“测试 7 的输入:”; $input = fgets(STDIN); 这不是单元测试的工作方式。 根据您的用例,可能有这样做的理由,但我想不出任何理由,并且由于解决方案很简单,我使用帖子的其余部分来描述为什么您可能不想这样做。

单元测试应该经常运行。真的真的经常。许多人使用每次编辑文件时运行测试的设置。但至少每次在将代码 checkin 源代码管理系统之前。 您真的想每次都编写 1(或 10 或 50)行以便您的测试套件运行吗?

单元测试的最大好处是,你有一个系统可以解决一个非常重要的问题“如果我在这里放入与昨天相同的东西,它是否仍然提供相同的输出/它仍然有效” 。所以我不认为每次都添加不同的东西有什么意义。

如果您更进一步,使用自动化系统来运行测试并发送电子邮件以防测试失败,那么没有人提供输入,因此您无法使用它......这是一个重要原因使用单元测试正是如此;)


如果您真的确定自己在做什么:抱歉“咆哮”


编辑(您的回复仅在为我发帖后才显示):同样的事情也适用于其他动态输入。恕我直言,你想确保结果是可重现的。如果您只需要一个临时变量/文件夹名称/ key /其他东西,那不是一个大问题。我只是使用 md5(mt_rand()) 或其他东西。即便如此,如果您能够以一种不必要的方式设置测试,那就太好了

关于php - 获取 PHPUnit 的控制台输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3459053/

相关文章:

php - Jquery将不同的id值传递给包含变量的通用函数

php - 多对多查询

c# - 每次调用最小起订量时,模拟方法输出不同的输出参数

unit-testing - 如何在不修改数据库的情况下运行集成测试?

c# - 尝试使用 webgrid 对 Controller 进行单元测试时,HttpContext 为空

php - 模拟 Laravel 的 Request::segment 方法

php - 除了带有 id 的 url 之外,YII url 管理工作

php - 推荐的 Twig 文件扩展名

php - Symfony 3 设置测试数据库

phpunit - 找不到 Silverstripe 4 SapphireTest 类