对于中高级程序员来说,最重要的技能之一就是判断代码是否正确的能力。在本章中,我们将讨论如何编写测试来评估代码的正确性。同时,我们还将讨论一种名为 "选择排序 "的排序算法。
临时测试
1. !=和==字符的滥用:只有两个数组都指向同一地址的时候,!=才返回true。如果是两个不同地址的完全相同的。
2. 为 Sort.sort 编写测试虽然繁琐,但相对简单。我们只需创建一个输入,调用 sort,然后检查该方法的输出是否正确。如果输出不正确,我们就打印出第一个不匹配项并终止测试。例如,我们可以创建一个如下的测试类:
TestSort.java
public class TestSort {
/** Tests the sort method of the Sort class. */
public static void testSort() {
String[] input = {"i", "have", "an", "egg"};
String[] expected = {"an", "egg", "have", "i"};
Sort.sort(input);
for (int i = 0; i < input.length; i += 1) {
if (!input[i].equals(expected[i])) {
System.out.println("Mismatch in position " + i + ", expected: " + expected + ", but got: " + input[i] + ".");
break;
}
}
}
public static void main(String[] args) {
testSort();
}
}
如下图所示,我们可以创建一个空白的 Sort.sort 方法来测试我们的测试:
Sort.java
public class Sort {
/** Sorts strings destructively. */
public static void sort(String[] x) {
}
}
JUnit Testing
org.junit 库提供了许多有用的方法和功能,可以简化测试的编写。例如,我们可以将上面的简单临时测试替换为
public static void testSort() {
String[] input = {"i", "have", "an", "egg"};
String[] expected = {"an", "egg", "have", "i"};
Sort.sort(input);
org.junit.Assert.assertArrayEquals(expected, input);
}
Selection Sort
注:关于java里.length和.length()的区别:
.length 是用于获取数组长度的方法。
.length()适用于获取字符串相关对象的方法。
.length不适用于对象,仅适用于数组。.length()适用于字符串,字符串不是一个原始数组。
字符串数组本质上是一个数组,应该用.length才对。
注2:java字符串比大小:a.compareTo(b) ,a和b比大小。
a=b,返回0;
若该a按字典顺序小于参数字符串b,则返回值小于0;
若a按字典顺序大于参数字符串b,则返回值大于0。
Java中的compareTo()方法,返回参与比较的前后两个字符串的ASCII码的差值。
注3:java中的输入操作:
- scanner类实现:
import java.util.Scanner; public class TestDemo1007_4 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int a = scanner.nextInt(); System.out.println(a); } }
而这里的“int a = scanner.nextInt();"表示从键盘输入的是一个整数,但如果想输入字符串就需要下面这样写:scanner.next()
Scanner scanner = new Scanner(System.in); String a = scanner.next(); System.out.println(a);
输入多个字符串:scanner.nextLine()
Scanner scanner = new Scanner(System.in); String a = scanner.nextLine(); System.out.println(a);
其他方法不建议使用。
@org.junit.Test
在每个方法前加上@org.junit.Test,