在Java中测试实现接口的所有类

7
有没有针对Java特别设计的工具可以自动测试接口的行为?例如,假设我有一堆用于Comparable接口的测试,应该适用于实现Comparable接口的任何对象。我希望能够自动地将“ComparableTests”包含在任何实现Comparable接口的类的测试夹具中。如果这可以与泛型接口一起使用那就更好了。
我知道.NET框架mbUnit有类似的东西,而且当你使用像TestNG的生成器函数时,你可以为Comparable设置一个测试夹具,并让生成器为每个实现Comparable接口的类创建一个实例。但我更希望它是自动的,并位于每个类的测试夹具中(因为我已经有了它们来测试该类的其他部分)。
澄清一下:我肯定可以建立这样的东西。我只是想知道是否已经有类似的工具可以实现这个功能。
4个回答

1

我知道如何找到类,但我不确定这如何回答问题。 - bhollis

1
根据您最后一段的描述,您想要做的是在单元测试中注入一些“额外的方法”,因为您已经在测试特定的类。我不知道是否有一个测试工具可以让您基于类的层次结构附加测试。
然而,根据您自己使用TestNG构建类似功能的建议,我认为您可能已经非常接近了。您可以很好地将一些基础代码合并到一个“默认测试类”列表中,如果它们实现了特定的接口,则会被依次测试。
但是,就一般情况而言,我认为您运气不太好,因为Java类型系统是单向的,您只能(容易地)找出一个类实现了哪些接口,而不能反过来。此外,问题在于“何时停止查找”:如果您有一个检查所有可比较实现者的测试,您是否希望它也检查String的有效性,因为它在您的Java环境中?

0
在.NET中,设置一个方法来查找程序集并确定每个类的继承/实现层次结构是非常简单的。如果你研究Java reflection API,我相信你也可以在Java中做到这一点。
然后,您可以创建ITargetInterface数组,并在每个接口上调用测试方法。

0

一种方法是在jar文件中搜索所有的.class文件(或搜索classes目录),使用Class.forName()方法加载类文件并检查MyInterface.class.isAssignableFrom(myClass)。

这种方法不容易处理公共内部静态类(您可以解析类文件名),但无法处理私有内部类或匿名内部类。


这可能会非常困难,因为复杂的工厂可能被用来实例化接口的特定实现。 - p3t0r

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接