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