什么是单元测试框架,我如何在Java中使用它

什么是单元测试框架,我如何在Java中使用它,java,testing,junit,Java,Testing,Junit,我看到很多新的程序员,特别是Java程序员,他们在那里做这样的测试: System.out.println(myMethod(someValue)); System.out.println(expectedValue == myMethod(someValue)); 然而,有一种称为单元测试框架的东西,可以帮助测试代码。那么,什么是单元测试框架,为什么我要使用它来帮助简化测试?在Java中如何使用它?什么是单元测试框架? 我将把它分成两部分。首先,您通常会做什么来进行测试,然后是单元测试框架如

我看到很多新的程序员,特别是Java程序员,他们在那里做这样的测试:

System.out.println(myMethod(someValue));
System.out.println(expectedValue == myMethod(someValue));
然而,有一种称为单元测试框架的东西,可以帮助测试代码。那么,什么是单元测试框架,为什么我要使用它来帮助简化测试?在Java中如何使用它?

什么是单元测试框架? 我将把它分成两部分。首先,您通常会做什么来进行测试,然后是单元测试框架如何提供帮助

你通常会做什么 首先,我要谈一谈新人将如何处理测试。假设您编写了一个AVL树实现,并希望检查它是否有效。AVL树需要有很多东西。最明显的是,节点左侧的所有节点都比该节点小,然后该节点右侧的所有节点都比该节点大。因此,您可以快速编写一个方法来检查这一点。然后在测试仪中:

System.out.println(tree.isValidBST());
但随后您发现这是在打印
false
。哪里出了问题?您可以搜索
isvalidbtst()
方法。看起来不错。然后看看你以前做过的手术

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(期望值,实际值)
assertTrue(布尔值应该正确)
。在每次测试之后,如果您愿意,您可以添加一个带有
@After
注释的方法。这通常用于拆卸和工作