![](/img/trans.png)
[英]why does junit4 not have Assert.assertArrayEquals() for double[]s?
[英]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工程师感到厌烦。 =
运算符不知道如何使用数组,因此它只能用于比较引用。 在您的情况下,它正在比较input
并expected
查看它们是否引用了完全相同的对象。 在您的代码中, input
和expected
都被声明为新数组,因此是不同的单独对象; 他们没有引用相同的对象。
至于assertArrayEquals
可能根本不使用=
运算符。 虽然我没有查看该方法的源代码,但我敢冒险猜测它首先检查引用是否相等(它们是否都引用同一个对象,然后检查它们是否均为数组,然后检查是否每个数组都expected
要素也在input
。
数组会增加平等的困惑,因为存在许多平等的定义。 平等可以定义为...
我的一个建议可能会帮助您更好地理解这个问题(以及将来可能会遇到的更多问题),请看一下无法正常工作的方法的源代码, 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.