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

时间:2011-02-25 06:08:51

标签: java unit-testing debugging testing junit

我理解测试和单元测试的重要性,但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的更强大功能?我编写的大多数单元测试看起来都像是一些简单的打印和布尔检查的繁琐版本。

4 个答案:

答案 0 :(得分:16)

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

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

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

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

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

答案 1 :(得分:1)

像JUnit,NUnit等测试框架为您提供了许多免费的功能,您无需自己实现。例如,JUnit会自动为你调用测试方法,setUp(),tearDown()等。它还有很多帮助器断言方法。

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

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

如果你有针对JUnit的东西试试TestNG - 它可能对你有用。

相关问题