Crystal 编译时自动进行单元测试

Crystal automated unit tests at compilation

据我了解,Crystal 可以在编译时执行单元测试,但我找不到太多关于它们的信息。

可以Crystal在编译时执行单元测试吗?如果是,我如何在新项目中实施它们以及如何为它们提供参数?
例如:如果某些测试需要互联网,如果我没有互联网,我能以某种方式发送/给出/设置一个参数来停用它们吗?

虽然不能完全回答您的问题,但 Guard 可能对您有用。这是我的设置方式,效果很好。虽然不是 Crystal 分片,但它是一个 Ruby gem,在开发环境中运行良好。

每当我保存文件时,guard 都会运行所有规范(这将是您的单元测试)。我收集到所有代码都是在 运行.

之前编译的

虽然 Crystal 规范 (https://crystal-lang.org/api/0.23.1/Spec.html) 不提供标记,但您可以指定一个文件夹:crystal spec spec/units。您可以将需要联网的规格放在另一个文件夹中。

您可以使用的另一种方法是编写 bash(或 Ruby)编译和运行规范的脚本。

顺便说一句,您可能不想为您的规格、单位或其他方面使用互联网。您可以使用 Webmock 模拟它们,或者在测试环境中重新打开 类。我一直在使用后一种方法,效果很好。

本文很好地概述了 Crystal 规范:http://ruby-journal.com/crystal/testing-whirlwind-tour-in-crystal-lang/

我建议永远不要依赖任何规格的外部连接。具体来说,单元测试应该是可靠的,而不仅仅是因为外部影响(没有连接、路由问题、API 更改,等等)而失败。 为外部请求设置模拟以模仿真实目标的基本行为。 只有集成测试可能需要一些真正的 API 访问权限。

您可以找到有关 Crystal 的 Spechere 的文档。