Clojure中的测试实践
1. 测试的重要性
测试在软件开发中是一个极具争议的话题。有些开发人员对自动化测试的优点、应该测试什么以及如何测试充满热情,而另一些开发人员则坚决反对自动化测试。尤其是在那些带有REPL(读取-求值-打印循环)的语言中,如Python、JavaScript或Clojure,情况更是如此。尽管如此,Clojure仍然提供了 clojure.test
命名空间,用于编写自动化测试。
在许多项目中,我几乎总是以某种形式使用自动化测试。近十年来,我一直采用测试驱动开发(TDD)的方法。编写测试不仅帮助我探索和验证想法,还为系统的成长、变化和重构提供了安全保障。TDD的“红/绿/重构”模式(Red/Green/Refactor)规定,首先编写一个失败的测试,然后实现最少的代码使测试通过,最后重构代码(包括测试代码)。以下是这个过程的简化图示:
graph TD;
A[编写测试] --> B[测试失败];
B --> C[编写代码使测试通过];
C --> D[测试通过];
D --> E[重构代码];
E --> F[测试通过];
2. 编写单元测试
在Clojur