用于测试Java类结构的库或框架

用于测试Java类结构的库或框架,java,testing,reflection,assert,Java,Testing,Reflection,Assert,我有这个。。。我用来查看创建的类是否与给定结构匹配的一组类。我要做的是读取属性文件,然后将其与类进行比较 即 等等 在我继续进行类似的工作之前,我想知道是否有人知道有一个库或框架可以这样做 我有一个很好的库,里面有很多反射工具,但是我不能发布它,因为许可证问题(挑逗!)或者其他原因。一旦您构建了一些基本的反射工具,事情就会很快地结合起来。请参阅 尽管这并不完全是您想要的,而且更基于规则。要做到这一点,您需要有一个能够解析“结构”(Java片段)并可能能够查找相关类型的Java解析器。(使用一些脚

我有这个。。。我用来查看创建的类是否与给定结构匹配的一组类。我要做的是读取属性文件,然后将其与类进行比较

等等


在我继续进行类似的工作之前,我想知道是否有人知道有一个库或框架可以这样做

我有一个很好的库,里面有很多反射工具,但是我不能发布它,因为许可证问题(挑逗!)或者其他原因。一旦您构建了一些基本的反射工具,事情就会很快地结合起来。

请参阅


尽管这并不完全是您想要的,而且更基于规则。

要做到这一点,您需要有一个能够解析“结构”(Java片段)并可能能够查找相关类型的Java解析器。(使用一些脚本语言可能会做得很糟糕,但它非常脆弱,并且容易产生误报,这会占用您希望此工具可以节省的时间)

我们的its框架具有这些功能。DMS旨在使人们能够构建任意自定义工具来分析或转换源代码。 DMS提供解析器(其中一个是由选定前端定义)、AST建造者、用于C语言、C++语言、java语言和COBOL语言的符号表构造,用于在程序上检查树和使用表面语法模式的工具,这些工具允许您直接表达代码片段(由前端解析确定)。用于代码生成或模式匹配目的


对于要执行的任务,您需要DMS解析感兴趣的软件,并进行名称和类型解析(构建符号表)。然后,您需要使用DMS的模式解析器将“规范文件”作为一组方法签名等读取,并使用名称解析器定位/查找标识符(例如,“demo.Helloworld”),找到相应的类,然后将解析的模式与方法签名相匹配。不匹配会报告不一致,这就是我认为您正在寻找的。

我不久前使用了一个很好的库,名为clapper:


在您的案例中-find“classutil”包-它提供了简单而有用的类发现和过滤器,也许这会很有用。

我真想知道您为什么会这样做。这似乎是对DRY的严重违反。我会理解它是否是基于规则的(就像所有实现此接口的类都应该命名为like)@Adam:当然是为了测试。我想测试一个类文件(一个.class文件)包含类、方法、属性等。它说是的。是的,测试基本上是重复你自己:)我肯定遗漏了一些东西。所以你想象有人在编写Java类的同时编写这些属性文件吗?为什么不只编写常规的单元测试呢。对于测试,我总是尽力为你的责任和契约级别付出最大的代价您正在进行的测试似乎不值得。特别是因为如果您重命名方法/属性,真正的单元测试将重构并显示编译时错误。如果您只是尝试实现命名一致性,请参阅我的答案。一个类怎么能说它包含了它实际上不包含的方法或属性?我想我可以构建一个小型DSL(实际上这就是我的.properties文件)我不确定使用DMS这样的工具是否是一种过度使用out@OscarRyz:仅为您的规范提供一个DSL是不够的。如果没有真正解析Java和进行名称/类型解析的能力,我认为您将无法得到您想要的。
className: demo.HelloWorld
classFile: demo/HelloWorld.class
methods:   public static main(java/lang.String[]) : void 
attributes: name : java.lang.String