什么是单元测试框架?
我将把它分成两部分。首先,您通常会做什么测试,然后是单元测试框架如何提供帮助。
你通常会做什么
首先,我要谈谈新手如何处理测试。假设您编写了一个 AVL 树实现,并且您想检查它是否有效。 AVL 树需要具备很多东西。最明显的就是一个节点左边的所有节点都比那个节点小,然后那个节点右边的所有节点都比那个节点大。所以你很快写了一个方法来检查这个。然后在您的测试仪中:
System.out.println(tree.isValidBST());
但是你发现这是打印false。它哪里出错了?你搜索你的isValidBST() 方法。看起来不错。然后你看看你之前做过的操作。
tree.insert(5);
tree.insert(4);
tree.insert(7);
tree.delete(4);
所以你首先去insert()方法,调试一切。您会看到它工作正常。然后你转到delete() 方法,然后你就发现了你的bug。恭喜!你已经完成了第一部分。现在你需要检查树是否总是平衡的。所以,你添加这个检查:
System.out.println(tree.isBalanced());
这又是行不通的。然后你回到你的insert() 方法,发现它没有正确地重新平衡树。您之前没有发现这一点,因为最初您不需要重新平衡树。这似乎是一个乏味的过程。必须有更简单的方法。幸运的是,有!
JUnit 如何提供帮助
JUnit 是一个单元测试框架的 Java 实现。
简单地说,单元测试框架允许您测试代码的各个部分。如果一件事出错了,如果你正确地编写了测试,你可以很容易地找到出错的部分,并轻松调试它。以AVLTree 为例,您可以使用JUnit 将其简化为。
AVLTree tree;
@Before
public void setup() {
tree = new AVLTree();
}
// Add tests to check if insert and delete are working
@Test
public void balanceTest() {
int[] values = new int[1000];
// initialize the values.
for(int num : values) {
tree.insert(num);
assertTrue(tree.isBalanced());
}
}
// Same for the valid bst check
现在,当您遇到错误时,比如说高度,您可以准确找出导致错误的原因。然后就可以轻松调试了。
语法
JUnit 的语法非常简单。如果您使用 @Before 注释,它将在每次测试之前执行该代码。您应该使用它来重置您正在处理的任何内容。在此示例中,我使用它来重置 AVLTree 值。然后,使用 @Test 注释进行测试。使用某些特殊方法来检查某些东西是否正常工作。这些方法是assert 方法。它们有很多,比如assertEquals(expectedValue, actualValue) 或assertTrue(booleanThatShouldBeTrue)。每次测试后,如果需要,可以添加带有 @After 注释的方法。这通常用于拆卸和工作。