#testing-tools #cli #stdout #line #functional #dead

bin+lib pharaoh

适用于命令行应用的简单功能测试工具

3 个不稳定版本

0.2.0 2021年9月26日
0.1.1-alpha.12021年9月16日
0.1.0 2021年9月14日

测试 中排名 #632

MIT 许可证

48KB
1K SLoC

Pharaoh : 构建测试金字塔!

GitHub Workflow Status GitHub release (latest SemVer) Codecov

它是什么

Pharaoh 是一个简单的、无需权限的功能测试运行器,用于命令行应用,由 Rust 编写。

此工具会扫描文件夹中的 YAML 条目(默认情况下为当前目录)并运行其中的所有测试。

以下是一个 YAML 的示例

name: this test will succeed
cmd: printf 'foo\n'
stdout: |
  foo
---
name: this test will fail
cmd: printf 'fou\n'
stdout: |
  foo
---
name: cat should work
cmd: cat
stdin: |
  this is a line
stdout: |
  this is a line
---
name: failing for all three reasons
cmd: cat
stdin: |
  my input
stdout: |
  a different output
stderr: |
  an unexpected stderr output
status: 1

对于此类文件中的每个条目,Pharaoh 将运行指定的命令,向其提供指定的 stdin,并将捕获的输出与指定的 stdout、stderr 和退出代码进行比较。如果未指定,则这些值分别默认为空字符串和 0。

为 TDD 制作,适用于 TDD

通常,您想要运行的是您正在工作的程序,并对它进行功能测试。具体来说,Pharaoh 是为了练习双重循环 TDD 而制作的,应与您项目特定的语言单元测试相辅相成。

例如,计算器的前几个测试可能如下所示

name: do nothing if stdin is empty
cmd: ./myevalexpr
---
name: evaluate a single expression
cmd: ./myevalexpr
stdin: |
  2 + 4
stdout: |
  6
---
name: evaluate multiple lines
cmd: ./myevalexpr
stdin: |
  5 + 2
  8 * 5
stdout: |
  7
  40
---
name: handle syntax errors
cmd: ./myevalexpr
stdin: |
  2 + +
stderr: |
  "2 + +": syntax error
status: 1

安装

发布二进制文件

Linux 和 MacOS 上都有发布二进制文件。请参阅 发布页面 以获取所有可用的二进制文件。

只需将下载的文件重命名为 pharaoh,通过 chmod +x 使其可执行,并将其放置在您的 $PATH 中即可。

通过 Cargo

由于 Pharaoh 是用 Rust 开发的,因此可以通过 cargo 获取

$ cargo install pharaoh

此项目面向谁?

Pharaoh 是针对学校项目和 kata 设计的,或者更普遍地,针对任何不值得自己构建工具的短期项目。

通常很难向学生教授TDD(测试驱动开发),因为他们的项目通常最长只有几周,而且没有提供测试工具。要求学生在项目之外再开发自己的工具,这个要求对他们来说跨度太大,所以他们通常默认手动进行测试。

此外,许多学生使用权限受限的环境,因此无法使用可能使用容器技术(如docker)的复杂工具。Pharaoh是一个无需进一步安装或配置的直接静态二进制文件,因此非常适合这些用例。

引导示例:使用双重循环TDD开发应用程序

即将推出!

依赖项

~10–24MB
~306K SLoC