【问题标题】:Problem with @test a java sorting program@test java 排序程序的问题
【发布时间】:2021-09-16 15:08:07
【问题描述】:

我做了一个排序方法,用于对数组进行升序排序:

public class Sorting {
    public void sort(int[] array) {

        if (Objects.isNull(array)) {
            throw new UnsupportedOperationException();

        } else {
            Arrays.sort(array);
            System.out.println(array);
        }
    }
}

我有一个 SortingTest 类:

public class SortingTest {

    Sorting sorting = new Sorting();

    @Test
    public void testNullCase() {
        int [] expected = null;
int [] actual = null;
        assertArrayEquals(expected, actual);

}
}

我测试了testEmptyCase()testSingleElementArrayCase()public void testSortedArraysCase()testOtherCases()。 我测试我的程序以对数组进行排序,但是对于以下@test 方法失败。如何正确进行测试?我想了解我需要做什么来做测试中的预期。感谢您的帮助。

@Test
    public void testNullCarelessSorting() {
        JUnitCore junit = new JUnitCore();
        Result result = junit.run(NullCarelessSortingTestExtension.class);

        assertEquals(1, result.getFailureCount());
        assertEquals(5, result.getRunCount());

        Failure nullCaseFailure = null;
        
    }

@Test
    public void testLazySorting() {
        JUnitCore junit = new JUnitCore();
        Result result = junit.run(LazySortingTestExtension.class);

        assertEquals(2, result.getFailureCount());
        assertEquals(5, result.getRunCount());

        Failure nullCaseFailure = null;
        Failure otherCasesFailure = null;
        
    }
@Test
    public void testTrickySorting() {
        JUnitCore junit = new JUnitCore();
        Result result = junit.run(TrickySortingTestExtension.class);

        assertEquals(4, result.getFailureCount());
        assertEquals(5, result.getRunCount());

        Failure emptyCaseFailure = null;
        Failure singleCaseFailure = null;
        Failure sortedCaseFailure = null;
        Failure otherCasesFailure = null;
           
}

【问题讨论】:

  • 为什么使用嵌套的do-while 循环?变量i 在此循环内不会更改,因此所有用户输入都存储在同一索引n[i] = scanner.nextInt() 中,直到用户输入0

标签: java arrays sorting testing


【解决方案1】:

您的 for 循环需要进行一些修正,如下所示:

public class Average
{
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        final int ARRAY_SIZE = 100;
        int[] n = new int[ARRAY_SIZE];
        int sum = 0;
        int count = 0;
        System.out.println("Input: ");
        for (int i = 0; i < ARRAY_SIZE; i++) {

            int a = scanner.nextInt();
            n[i] = a;
            sum += n[i];
            count++;
            if (a == 0)
            {
                break;
            }
        }

        System.out.println(count <= 1 ? "Output : " + (sum) : "Output : " + (sum / (count - 1)));
    }
}

您的逻辑中发生的情况是第一个索引 (0) 不断重复,因为在您的主 for 循环中有另一个 do-while 循环不断消耗您的扫描仪输入。

【讨论】:

  • 非常感谢!
  • 确实如此。更新了处理该问题的条件。
  • 如果您被排序,请您接受答案。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
  • 2020-06-18
  • 1970-01-01
  • 1970-01-01
  • 2019-09-28
相关资源
最近更新 更多