type
status
date
slug
summary
tags
category
icon
password
Ad Hoc Testing
这是一种临时测试方法
这是一段用于检测排序程序是否正确的代码
首先给出输入、以及预期输出,通过比对经过排序函数的输出与预期是否相符,得出排序程序是否正确
如果进行数组比较时,需要使用
java.util.Arrays.equals(input, expected)
进行比较原因其实跟 C 语言差不多,因为如果使用
==
判断,则是在比较地址位置J Unit
Selection Sort 选择排序
找到最小值
int cmp = x[i].compareTo(x[smallestIndex])
具体来说,
compareTo()
是 String
类的方法,它比较两个字符串的字典顺序,返回值的含义如下:- 返回值为 0:两个字符串相等。
- 返回值为负数(小于 0):
x[i]
字符串在字典顺序上小于x[smallestIndex]
字符串。
- 返回值为正数(大于 0):
x[i]
字符串在字典顺序上大于x[smallestIndex]
字符串。
这里传入的是一个字符串,然而字符串无法用==比较,因而需要调用方法
进行交换
这里对于找最小值做出了一些修改:为了后续交换的便利,把返回值从最小值改成了最小值对应的index
在swap中,需要注意新定义一个temp中间变量,用于帮助交换
这里用
String temp
而不是char
的原因是:String[]中的每一个元素的数据类型都是string,这里没有用char[]创建数组递归运算
内部定义了一个同名但是private的sort函数,但是不会冲突
因为private只能在内部调用,而public可以在外部调用
public内通过调用private的sort函数,实现了从指定某一位开始排序的功能
在递归的时候,对于开始的index逐次加一
Debug
这里通过debugger,找到了一处错误,以上代码是修改后的
对findsmallest函数,应该增加一个参数,用于制定开始index,以和sort的范围对应
Better J Unit
1. Annotate each test with @org.junit.Test
- 注解每个测试方法:为了让 JUnit 识别哪些方法是测试方法,应该在每个测试方法前加上
@Test
注解。这个注解告诉 JUnit 该方法是一个测试用例,JUnit 会自动执行这些带有@Test
注解的方法。
2. Change all test methods to non-static
- 将所有测试方法改为非静态方法:传统的做法是把测试方法定义为静态的,这样可以避免创建测试类的实例。然而,现代的 JUnit 测试要求测试方法是非静态的,以便为每个测试方法创建一个新的实例,这样能够更好地管理每个测试的状态。
- 这样做有助于避免不同测试方法之间的共享状态,确保测试的独立性。
3. Use a JUnit runner to run all tests and tabulate results
- 使用 JUnit 运行器:JUnit 提供了运行器(runner)来自动执行所有测试,并统计结果。运行器会自动调用所有带有
@Test
注解的方法,执行测试,并根据每个测试的执行情况生成结果。
- IntelliJ 提供了默认的测试运行器:如果你在 IntelliJ IDEA 中使用 JUnit,只需点击 "Run" 按钮即可自动运行所有测试,无需手动编写
main
方法来调用测试方法。
- 删除
main
方法:在使用 JUnit 运行器时,你不再需要自己写main
方法来调用测试,JUnit 会自动处理这一部分。
- 输出渲染:JUnit 的输出会被自动渲染成易于阅读的格式,不需要手动打印测试结果,这使得阅读测试报告更方便。
4. Command line option:
- 如果不使用 IDE (如 IntelliJ),你也可以通过命令行工具来运行测试。在图片中提到,使用命令行时需要特别注意。你可以使用命令行工具(如
jh61b
运行器)来执行测试,但通常不推荐这种方法,最好是使用 IDE 提供的自动化功能。
5. Rendered output is easier to read, no need to manually invoke tests
- 渲染输出更易于阅读:JUnit 自动生成的测试输出通常会更易于理解,不再需要你自己手动调用测试方法或打印测试结果。所有的测试执行和结果汇总都由 JUnit 运行器处理,生成易于理解的格式。
import
和python一样,通过导入库/类,简化对于函数/方法的调用
这样可以简化调用方式
TDD

相较于自动评测驱动的开发,测试驱动的开发更值得推荐
- 作者:昊卿
- 链接:hqhq1025.tech/article/cs61b/lec3
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。