有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用JMockit模拟数组。类中的sort()方法

我试着模仿数组。排序方法以确保QuickSort类中的实现不使用数组。分类我该怎么做?这是我的尝试,结果是java.lang.StackOverflowError

  @Test
  public void testQuickSort() {

    Integer[] array = {3, -7, 10, 3, 70, 20, 5, 1, 90, 410, -3, 7, -52};
    Integer[] sortedArray = {-52, -7, -3, 1, 3, 3, 5, 7, 10, 20, 70, 90, 410};
    QuickSort<Integer> quicksort = new QuickSort<>();

    new Expectations(Arrays.class) {{
        Arrays.sort((Integer[]) any);
    }};

    quicksort.quicksort(array);

    // some asserts
    // assertArrayEquals(sortedArray, array);
    // ...
  }

共 (2) 个答案

  1. # 1 楼答案

    您需要模拟它,并将调用Arrays.sort的时间限制为0

    @Test
    public void testQuickSort(@Mocked Arrays mock) {
        new Expectations() {{
            mock.sort((Integer[]) any);
            times = 0;
        }};
    
        quicksort.quicksort(array);
    }
    
  2. # 2 楼答案

    我可以这样模拟静态方法:

    new MockUp<Arrays>() {
        @Mock
        public void sort(Object[] o) {
             System.out.println("Oh no.");
        }       
    };
    

    Source