2

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

4

1 回答 1

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
  }
}

最好的问候, 齐德

于 2013-11-02T23:52:19.417 回答