从源代码检测对Java API方法的调用
假设我想为一个方法或类编写一个单元测试,以确保该方法的源代码不调用某个JavaAPI方法(在本例中为从源代码检测对Java API方法的调用,java,unit-testing,sorting,Java,Unit Testing,Sorting,假设我想为一个方法或类编写一个单元测试,以确保该方法的源代码不调用某个JavaAPI方法(在本例中为Arrays.sort)。这可能吗?我之所以想这样做,是因为我想进行自动测试,检测是否从特定类的特定方法中的任何位置调用了数组。sort,在这种情况下,我希望相关测试失败。不幸的是,基于文本的方法完全不能令人满意,因为它也会引起关注 例如,对Arrays.sort的潜在引用可以从源代码注释中进行排序。非常感谢您的帮助。您可以通过创建排序界面和使用Arrays.sort的实现来实现 public i
Arrays.sort
)。这可能吗?我之所以想这样做,是因为我想进行自动测试,检测是否从特定类的特定方法中的任何位置调用了数组。sort
,在这种情况下,我希望相关测试失败。不幸的是,基于文本的方法完全不能令人满意,因为它也会引起关注
例如,对Arrays.sort的潜在引用可以从源代码注释中进行排序。非常感谢您的帮助。您可以通过创建排序界面和使用Arrays.sort的实现来实现
public interface SortUtil {}
public class SortUtilImpl implements SortUtil {
public void sort(Collection c) {
Arrays.sort(c);
}
}
现在,您必须使用“客户端”类中的接口进行排序。对于单元测试,将实际实现替换为测试模拟实现。比如:
public SortUtilMock implements SortUtil {
public void sort( Collection c) {
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
//... here you check if the sort is called by a forbidden method
}
}
致以最良好的祝愿,
Zied这当然是可能的,但可能并不容易。您可能能够连接到Eclipse编译器并观察它的AST或其他数据结构。可能-我可能会使用Javassist遍历类的字节码并查找调用该方法的任何指令-但是为什么?!?