7

有什么东西可以让您自动测试接口的行为(特别是针对 Java)吗?例如,假设我对 Comparable 接口进行了一堆测试,这些测试应该适用于实现 Comparable 的任何东西。我想要的是能够在我的任何实现 Comparable 的类的测试装置中自动包含“ComparableTests”。如果这适用于通用接口,则可以加分。

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

澄清:我绝对可以建造这样的东西。我在问是否有任何东西已经启用了这个。

4

4 回答 4

1

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

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

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

于 2008-09-20T23:45:57.367 回答
1

试试这个 http://www.xmlizer.biz/java/classloader/ClassList.java

于 2009-07-14T22:26:07.977 回答
0

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

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

于 2008-09-20T19:44:47.260 回答
0

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

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

于 2008-09-20T20:07:04.303 回答