Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JUnit测试——是什么让它比手动测试更有用?_Java_Unit Testing_Debugging_Testing_Junit - Fatal编程技术网

Java JUnit测试——是什么让它比手动测试更有用?

Java JUnit测试——是什么让它比手动测试更有用?,java,unit-testing,debugging,testing,junit,Java,Unit Testing,Debugging,Testing,Junit,一般来说,我理解测试和单元测试的重要性,但是JUnit在现实世界中是否普遍使用,与“手动”测试方法相比,使用它有什么优势?也就是说,为什么要使用JUnit测试: public class MyTest extends TestCase { public void testSomething() { assertTrue(someCondition); assertTrue(manyOtherConditions); } } 与某种轻量级自

一般来说,我理解测试和单元测试的重要性,但是JUnit在现实世界中是否普遍使用,与“手动”测试方法相比,使用它有什么优势?也就是说,为什么要使用JUnit测试:

public class MyTest extends TestCase
{
    public void testSomething()
    {
        assertTrue(someCondition);
        assertTrue(manyOtherConditions);
    }
}
与某种轻量级自定义编码单元调试工具相比

public class MyTest
{
    public static void testSomething()
    {
        MyDebugUtility.println(someCondition);
        MyDebugUtility.println(expectedCondition);
    }
}
自己检查返回值?无论采用哪种方法,您都必须在条件之间进行比较,并且对于单元测试,似乎很容易在测试代码中出错(正如我所做的那样),并想知道当您的真正错误是意外地键入assertTrue而不是assertFalse时,为什么您的类不能工作

即使您想要简单的布尔函数,是什么让JUnit优于

public class MyTest
{
    public static void testSomething()
    {
        if(condition1)
            MyDebugUtility.println("Passed condition1");
        else
            MyDebugUtility.doError(); //handle however you want
    }
}

我还缺少JUnit更强大的功能吗?我编写的大多数单元测试似乎只是一些简单打印和布尔检查的繁琐版本。

测试框架,如JUnit、NUnit等,免费为您提供了许多功能,您无需自行实现。例如,JUnit将自动为您调用测试方法,setUp()、tearDown()等等。它还有许多助手断言方法

另一个优点是JUnit通常集成在IDE中


这些都不是火箭科学,你可以自己实现。以前我不得不推出自己的JUnit类功能。但除非你有特殊需要,为什么还要麻烦呢

回答第一个问题-是的,实际上,几乎所有严肃的软件公司都会使用某种形式的自动化单元测试。使用现成单元测试框架的原因有很多,其中有几个:

  • 您真的要手动检查1000份打印报表吗?难道你不想让电脑帮你做这件事,然后告诉你“是的,一切都很好”,这样你就可以继续编码了吗

  • 它们可以作为构建的一部分由脚本运行,也可以在每次提交时运行。以这种方式使用,没有人需要记住运行它们(作为人类,我们常常会忘记)

  • 测试框架已经编写和调试。如果您担心在构建测试的过程中引入bug,那么我更担心的是在从头开始构建整个测试框架时犯错误,而不是在一些测试中犯一个简单的逻辑错误

  • 正如seand所指出的,xUnit类型的框架非常常见,它们通常被集成到其他类型的工具中——IDE将运行它们,像Hudson这样的持续集成工具可以解析它们的日志并跟踪它们随时间的成功/失败率,或者在失败时通过电子邮件通知您。这是您必须自己构建的所有功能——尽管您现在可能不需要/想要它,但如果您将来需要它,它将是可用的


  • JUnit几乎可以毫不费力地集成到continuos集成过程中,因此,如果有人破坏了构建,团队在几分钟内就会知道这一点。仅此功能就值得使用

    当然,在其他答案中还有其他有用的特性。JUnit是一个你真的不想重新发明的轮子


    如果您反对JUnit,请尝试TestNG——它可能对您更有效。

    简而言之,它是一种标准化的单元测试方法。His提高了开发人员的熟悉度,并改进了与工具(构建工具、CI、代码分析等)的集成

    @Martin:那是不必要的。记住:不是每个人都是有经验的开发人员。