
String 不可变类型,StringBuilder 可变的对象。
final 不可变引用,对可变值(如StringBuilder)进行不可变引用,其值可以更改。
int count = lst.size(); lst.add(e); if (lst,isEmpty()) ...Map
map.put(key,val); map.get(key); map.containsKey(key); map.remove(key);Set
s1.contains(e); s1.containsAll(s2); s1.removeAll(s2);快速创建数组
String[] arr = {"a","b","c"};
Arrays.asList(new String[] {"a","b","c"}); //长度固定
Arrays.asList("a","b","c"); //长度固定
迭代 map
for (String key : turtles.keyset()) {
System.out.println(key + ": " + turtles.get(key));
}
Java I/O
java.io.File //表示磁盘上的文件,测试是否可读,删除文件等 java.io.FileReader // 阅读文本文件 java.io.BufferedReader // 有效阅读文本,可以一次阅读整行测试
测试希望发现程序中错误,尽早、经常进行测试,在开发时进行测试
单个功能的开发按以下顺序进行
原则:测试用例足够小,可以快速运行,但又足够大,可以验证程序。
方法
测试 BigInteger.multiply()
public BigInteger multiply(BigInteger val) //用法: BigInteger a = ...; BigInteger b = ...; BigInteger ab = a.multiply(b);
multiply 实际上它是两个参数的函数
进行分区
设计(a,b)空间,a,b 是独立的,分别都是
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ovbuqBjo-1654449191489)(image/multiply-partition.png)]
一共 49 种情况。
在分区中包括边界错误通常发生在子域之间的边界处。
常见的边界有:
测试 public static int max(int a, int b)
详尽的测试包括:完整的笛卡尔积 和 覆盖每个部分。
单元测试JUnit assertEquals(expect, actual)
每个测试方法上方应有一条注释,说明如何选择其测试用例,即它涵盖分区的哪些部分:
// covers test.length() = 0,
// start = 0 = text.length(),
// text.length()-start = 0
@Test public void testEmpty() {
assertEquals("", reverseEnd("", 0));
}
黑盒和白盒测试
黑盒测试
白盒测试
白盒测试实例
public static void sort(Listvalues) { // choose a good algorithm for the size of the list if (values.length() < 10) { radixSort(values); } else if (values.length() < 1000*1000*1000) { quickSort(values); } else { mergeSort(values); }
测试当数组长度为 10 时的情况: values = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
这种只有知道代码的实现才知道。
EclEmma 的一个很好的 Eclipse 代码覆盖工具
集成测试程序可能会在模块之间的连接上失败,集成测试将测试模块组合。
自动化测试运行测试并自动检查其结果
修复错误后,把错误样例输入自动化测试中,是回归测试。因为该错误可能很容易再犯,因为它已经发生过一次
总结优质程序的三个属性