从源代码检测对Java API方法的调用

时间:2013-11-02 23:36:21

标签: java unit-testing sorting

假设我想为方法或类编写单元测试,以确保该方法的源代码不会调用某个Java API方法(在本例中为Arrays.sort)。这甚至可能吗?我想要这个的原因是因为我想提出自动测试来检测是否已经从特定类的特定方法内的任何地方调用Arrays.sort,在这种情况下我想要失败相关的测试。不幸的是,基于文本的方法纯粹不能令人满意,因为它也会受到影响 例如,可以从源代码注释中引用Arrays.sort。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

您可以通过创建用于排序的界面和使用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