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

时间:2008-09-20 19:24:10

标签: java unit-testing interface

是否有任何东西(特别是Java)允许您自动测试接口的行为?举个例子,假设我有一堆Comparable接口的测试,应该适用于实现Comparable的任何东西。我想要的是能够在我的任何实现Comparable的类的测试装置中自动包含“ComparableTests”。如果这适用于通用接口,则可获得奖励。

我知道.NET框架mbUnit有类似的东西,当你使用像TestNG的生成器函数这样的东西时,你可以为Comparable设置一个测试夹具,并让生成器创建每个类的实例实现Comparable。但我宁愿把它变成自动的,并且位于每个类的测试夹具上(因为我已经将它们用于测试该类的其他部分)。

澄清:我绝对可以建立这样的东西。我在问是否有任何已经启用此功能的内容。

4 个答案:

答案 0 :(得分:1)

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

然而,根据你自己的建议使用TestNG来构建类似的东西,我想你可能会非常接近。您可以很好地合并一些基本代码,将您的类添加到“默认测试类”列表中,如果它们实现特定的接口,则会对其进行测试。

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

答案 1 :(得分:1)

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

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