繁体   English   中英

Junit对于UCB cs61B使用IntelliJ没有显示任何结果(org.junit.Assert.assertArrayEquals())

[英]Junit did not show any results using IntelliJ for UCB cs61B (org.junit.Assert.assertArrayEquals() )

我正在独自学习CS61B-UCB,并且是使用IntelliJ和Junit4.12的初学者。 我发现my org.junit.Assert.assertArrayEquals()没有结果

在视频中有这样的节目

在运行窗口中。

这是TestSort.java的代码

import static org.junit.Assert.*;
import org.junit.Test;
/** Tests the the Sort class. */
public class TestSort {
/** Test the Sort.sort method. */
@Test
public void testSort() {
    String[] input = {"i", "have", "an", "egg"};
    String[] expected = {"an", "egg", "have", "i"};

    Sort.sort(input);
    if (input != expected)
    {
        System.out.println("something wrong!");
    }

    org.junit.Assert.assertArrayEquals(expected, input);
}
@Test
public void testFindSmallest() {
    String[] input = {"i", "have", "an", "egg"};
    int expected = 2;

    int actual = Sort.findSmallest(input, 0);
    assertEquals(expected, actual);

    String[] input2 = {"there", "are", "many", "pigs"};
    int expected2 = 2;

    int actual2 = Sort.findSmallest(input2, 2);
    assertEquals(expected2, actual2);
}

@Test
public void testSwap() {
    String[] input = {"i", "have", "an", "egg"};
    int a = 0;
    int b = 2;
    String[] expected = {"an", "have", "i", "egg"};

    Sort.swap(input, a, b);
    assertArrayEquals(expected, input);
}
}

这是Sort.java的代码

public class Sort {
public static void sort(String[] x) {
    sort(x, 0);
}

private static void sort(String[] x, int start) {
    if (start == x.length) {
        return;
    }
    int smallestIndex = findSmallest(x, start);
    swap(x, start, smallestIndex);
    sort(x, start + 1);
}

public static void swap(String[] x, int a, int b) {
    String temp = x[a];
    x[a] = x[b];
    x[b] = temp;
}

public static int findSmallest(String[] x, int start) {
    int smallestIndex = start;
    for (int i = start; i < x.length; i += 1) {
        int cmp = x[i].compareTo(x[smallestIndex]);

        if (cmp < 0) {
            smallestIndex = i;
        }
    }
    return smallestIndex;
}
}

我认为Junit的功能是获取绿色部分,该部分显示我的代码如何工作,并获取两个字符串是否相等的结果。

关于IntelliJ的另一个问题是,我运行它与使用终端进行编译和操作之间是否有区别? 因为当我使用终端时,它将显示如下内容

在此处输入图片说明

我对此进行了很多搜索,它总是说我没有将Junit.jar应用于classpath。 我检查了是否添加了图书馆。 在此处输入图片说明

仅供参考,您可以在此处获取库在此处输入链接说明

我调试了testSort函数,它在输入部分和sort函数部分都运行良好。 虽然它给了我提示在此处输入图像描述的提示,但我选择了下载,它显示了未找到的源在此处输入图像描述 ,当我从现有文件中选择源时在此处输入图像描述 ,它一直在附加....如何解决这个问题?

您的代码可能未按预期运行,但它的运行完全像经验丰富的Java开发人员所期望的那样。 让我解释...

您已经发现=运算符的行为(或更准确地说,在本例中为!= )经常使经验不足的Java工程师感到厌烦。 =运算符不知道如何使用数组,因此它只能用于比较引用。 在您的情况下,它正在比较inputexpected查看它们是否引用了完全相同的对象。 在您的代码中, inputexpected都被声明为新数组,因此是不同的单独对象; 他们没有引用相同的对象。

至于assertArrayEquals可能根本不使用=运算符。 虽然我没有查看该方法的源代码,但我敢冒险猜测它首先检查引用是否相等(它们是否都引用同一个对象,然后检查它们是否均为数组,然后检查是否每个数组都expected要素也在input

数组会增加平等的困惑,因为存在许多平等的定义。 平等可以定义为...

  • 两个数组具有相同数量的相同顺序的元素
  • 这两个数组具有相同数量的元素,但顺序不同
  • 一个数组有5个元素,而另一个数组有10个元素,其中第一个数组的所有5个元素也在第二个数组中
  • 等等

我的一个建议可能会帮助您更好地理解这个问题(以及将来可能会遇到的更多问题),请看一下无法正常工作的方法的源代码, assertArrayEquals在这个案例。 IntelliJ允许您导航到源代码,或者如果源代码不可用,请查看反编译的字节码。 在Mac上,只需在命令上单击鼠标右键。 在Windows中,可以按住Control键并单击。 (对不起,IntelliJ有太多不同的快捷方式设置,我无法具体说明。)

有关此主题的更多信息... Java中== vs equals()之间有什么区别? https://javabeginnerstutorial.com/core-java-tutorial/java-equals-method-vs-operator/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM