我希望研究我们用作程序员的基本构建块,因此我正在考虑为Java开发单元测试框架。 我不打算写一个替代junit的框架; 我的目的是通过做一个有价值的项目来获得一些经验。
答案 0 :(得分:7)
有几本书描述了如何构建单元测试框架。其中一个是Kent Beck的Test-Driven Development: By Example(TDD)。您可能会看到的另一本书是Gerard Meszaros的xUnit Test Patterns: Refactoring Test Code。
如果(正如您的意见所示)您的目标是通过自己动手来了解制作良好单元测试框架的因素,那么TDD书籍的第18-24章(第二部分:xUnit示例)如何在Python中完成。将其改编为Java可能会教你很多关于Python,单元测试框架以及可能的Java。
拥有一些单元测试框架的经验对您来说仍然很有价值,这样您就可以将您生产的产品与其他产品的产品进行比较。谁知道,你可能有一些他们错过的基本见解,你可以为每个人改进。 (不太可能,我很遗憾地说,但这是可能的。)
请注意,TDD人员非常坚定TDD不能很好地与数据库配合使用。这对我来说很麻烦,因为我的工作集中在DBMS开发上;这意味着我必须调整文献中通常所支持的技术,以适应“测试DBMS工作是否意味着针对DBMS进行测试”的现实。我认为他们担心的主要原因是将数据库设置为已知状态需要时间,因此使测试速度变慢。我能理解这个问题 - 这是一个实际问题。
答案 1 :(得分:5)
基本上,它由三部分组成:
准备测试集意味着您的框架应该收集您要运行的所有测试。您可以在单独的文件(java或xml)中指定这些测试(通常是具有满足某些约定的测试方法或使用某些注释标记或实现标记接口的类),或者您可以动态地找到它们(在类路径上进行搜索)。 / p>
如果选择动态搜索,那么您可能必须使用一些可以分析java字节码的库。否则你将必须加载类路径中的所有类,这a)需要很多时间,b)将执行所有加载类的静态初始化器,并可能导致意外的测试结果。
根据框架的功能,运行测试可能会有很大差异。最简单的方法是在try / catch块中调用测试方法,分析并保存结果(您必须分析两种情况 - 抛出断言异常时以及何时抛出它)。
制作报告就是以xml / html / wiki或其他任何格式打印分析结果。
答案 2 :(得分:2)
Cook's Tour由Kent Beck编写(我相信;它没有被归因),并描述了编写JUnit时的思考过程。我建议阅读它并考虑如何选择另一种开发方式。