此包已被弃用且不再维护。作者建议使用 gentry/gentry 包。

PHP 单元测试生成工具

0.9.0 2016-03-17 17:51 UTC

README

PHP7+ 的测试框架

好的程序员都很懒惰,但不幸的是,这也意味着像编写测试(无聊)这样的东西经常被跳过。请不要这样做;它很重要,一旦实施就非常方便。

Gentry 是基于以下三个目标设计的

  1. 使编写测试变得如此容易,即使是最大的懒人也会去尝试;
  2. 通过为您生成骨架来减轻编写样板代码的工作。
  3. 速度。您希望在推送之前运行测试,因此如果它们很慢,那将是令人讨厌的。

先决条件

  • 确保您有 PHP7。真的,Gentry 使用了一些新特性,所以它在旧版本上会失败得很惨。
  • 打开断言并配置它们在失败时抛出 AssertionError。请参阅 手册中的这一部分;两个值都应设置为 1

安装

Composer(推荐)

composer require --dev monomelodies/gentry

您现在可以运行 vendor/bin/gentry

手动

下载或克隆仓库。根目录下有一个可执行文件。

配置

在项目的根目录下创建一个 Gentry.json 文件。它使用以下选项

{
    "src": "/path/to/src",
    "tests": "/path/to/tests",
    "bootstrap": "/path/to/bootstrap.php",
    "namespace": "Foo",
    "ignore": "some.*?regex"
}

string|array src

string tests

两者 srctests 都可以是绝对路径,也可以是相对于根目录的路径,因此 "/path/to/root/src" 可以简化为 "src"

目录是递归的。如果 Gentry 检测到 testssrc 内部,它会为您跳过它(但真的,不要这样做)。

Gentry 支持多个 src 目录,但只有一个 tests 目录。简单的理由是,将脚本放在 src 之外的 bin 目录中是很常见的,但仍然需要对其进行测试。

string|array bootstrap

文件("引导器")的路径,每个应用程序中的代码都需要。这通常是位于 index.php 入口点或类似文件中的某种东西。这些文件在 Gentry 分析您的代码时通常被忽略,并应该执行类似初始化自动加载器的事情。

您也可以传递一个文件数组而不是字符串。它们将按顺序添加。

includePathbootstrap 之前解析,因此如果同时使用它们,您可以使用相对路径。否则,它们将相对于 get_cwd()

注意:如果 bootstrap 文件位于 src 目录内,它们不会被忽略。Gentry 当然使用 require_once,但如果这些文件包含可测试的特性,它会尝试对它们进行合理的处理。

这并不一定是坏事;你实际上可以编写测试来测试你在其他测试中使用的模拟对象哦 :)

字符串 ignore

"src" 路径中忽略的类名正则表达式。对于自动忽略难以测试的类类型,如控制器,非常有用。如果你测试和源代码混合在一起,你也可以使用它(但说真的,不要这么做)。

用法

现在从命令行运行 Gentry 看看会发生什么

vendor/bin/gentry

它会抱怨它目前什么都不能做。这是有道理的,我们还没有写任何测试!

详细模式

如果你想获取更多信息,请使用 -v 标志运行 Gentry

vendor/bin/gentry -v

在默认模式下,仅显示重要信息。但当你遇到问题或者想要得到关于不完整测试等信息的反馈时,详细模式可能很有用。

检测环境

对于许多测试,你需要检测是否应该使用模拟对象(例如,数据库连接),或者“真实的东西”。最简单的方法是在需要的地方检查 getenv("GENTRY")。Gentry 可执行文件会为你设置这个变量,所以这是一个确定你在测试模式的可靠方法。除非你还在其他地方使用相同的环境变量。但这会很愚蠢。

生成缺失的测试

使用 -g 标志运行 Gentry,为你生成缺失测试的骨架

vendor/bin/gentry -g

更多关于生成测试的内容,请参阅手册中的相应部分。