JUnit测试 - 什么使它比手动测试更有用?

don*_*ton 3 java testing debugging junit unit-testing

我一般都了解测试和单元测试的重要性,但JUnit在现实世界中普遍使用,使用它而不是"手动"测试方法有什么优势?也就是说,为什么要使用JUnit测试:

public class MyTest extends TestCase
{
    public void testSomething()
    {
        assertTrue(someCondition);
        assertTrue(manyOtherConditions);
    }
}
Run Code Online (Sandbox Code Playgroud)

与某种轻量级的自定义编码单元调试工具相比

public class MyTest
{
    public static void testSomething()
    {
        MyDebugUtility.println(someCondition);
        MyDebugUtility.println(expectedCondition);
    }
}
Run Code Online (Sandbox Code Playgroud)

并自己检查返回值?无论哪种方式,您都必须在条件之间进行比较,并且使用单元测试,在您的测试代码中显得非常容易(如我所做)并且想知道为什么当您的真实错误时您的课程无效是意外键入assertTrue而不是assertFalse.

即使你想要简单的布尔功能,JUnit的优势也是如此

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

我缺少JUnit的更强大的功能吗?我编写的大多数单元测试看起来都像是一些简单的打印和布尔检查的繁琐版本.

Rya*_*ell 17

回答第一个问题 - 是的,在实践中,几乎所有认真的软件公司都会使用某种形式的自动化单元测试.使用现成的单元测试框架的众多原因中的一小部分:

  1. 你真的想亲自检查1000份打印报表吗?难道你不想让电脑为你做这件事而只是告诉你"是的,一切都没问题"所以你可以回到编码?

  2. 它们可以作为构建的一部分或每次提交由脚本运行.以这种方式使用,没有人必须记住运行它们(并且是人类,我们经常会忘记).

  3. 测试框架已经编写和调试.如果您担心在构建测试过程中引入错误,我会更担心从头开始构建整个测试框架的错误,而不是在几个测试中做出简单的逻辑错误.

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