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

测试在Java中实现接口的所有类,java,unit-testing,interface,Java,Unit Testing,Interface,是否有任何东西(特别是Java)允许您自动测试接口的行为?例如,假设我有一系列可比较接口的测试,这些测试应该适用于实现可比较接口的任何东西。我希望能够在实现Comparable的任何类的测试夹具中自动包含“ComparableTests”。如果这适用于通用接口,则可获得额外点数 我知道.NET framework也有类似的功能,当您使用TestNG的生成器函数时,可以为Comparable设置一个测试夹具,并让生成器为实现Comparable的每个类创建一个实例。但是我希望它是自动的,并且位于我

是否有任何东西(特别是Java)允许您自动测试接口的行为?例如,假设我有一系列可比较接口的测试,这些测试应该适用于实现可比较接口的任何东西。我希望能够在实现Comparable的任何类的测试夹具中自动包含“ComparableTests”。如果这适用于通用接口,则可获得额外点数

我知道.NET framework也有类似的功能,当您使用TestNG的生成器函数时,可以为Comparable设置一个测试夹具,并让生成器为实现Comparable的每个类创建一个实例。但是我希望它是自动的,并且位于我的每个类的测试夹具上(因为我已经有了它们来测试该类的其他部分)


澄清:我完全可以构建这样的东西。我在问是否有什么东西已经启用了这个功能。

在.NET中,设置一个方法来查看程序集并标识每个类的继承/实现层次结构是非常简单的。我相信,如果你研究一下这个问题,你也可以用Java来做


然后,您可以创建一个
ITargetInterface
s数组,并对每个数组调用一个测试方法。

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


这不会轻易地处理公共内部静态类(您可以解析类文件名),但不会处理私有内部类或匿名内部类。

根据上一段,您试图做的是在单元测试中注入一些“额外方法”,因为您已经在测试特定类。我不知道有哪种测试工具允许您基于类的层次结构附加测试

然而,根据您自己关于使用TestNG构建类似内容的建议,我认为您可能已经非常接近了。您可以很好地合并一些基本代码,将您的类添加到“默认测试类”列表中,如果这些类实现了特定的接口,那么这些类将依次进行测试

尽管如此,关于一般情况,我认为您运气不好,因为Java类型系统是单向的,您只能(轻松地)找到类实现的接口,而不是相反的方式。此外,问题是“在哪里停止查找”:如果您有一个测试检查所有可比较的
实现者,您是否希望它也检查
字符串的有效性,因为它在您的Java环境中?

试试这个

这可能会非常困难,因为复杂的工厂可能会用来实例化接口的特定实现。我知道如何查找类,但我不确定这如何回答这个问题。