2011-02-25 46 views
3

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

+0

@Martin:这是不需要的。记住:并非每个人都是有经验的开发人员 – 2011-02-25 07:04:22

回答

16

要回答第一个问题 - 是的,在实践中,任何认真的软件公司都会使用某种形式的自动化单元测试。短短几年的许多理由使用一种现成的,现成的单元测试框架:

  1. 你真的要手工检查1000打印报表?你不想让电脑为你做,只是告诉你“是的,一切都很好”,所以你可以回到编码?

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

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

  4. 由于seand指出,的xUnit型构架是如此普遍,他们通常集成到其他类型的工具 - 集成开发环境将运行它们,像Hudson持续集成工具可以解析它们的日志和跟踪他们的成功/失败随时间变化的速率,或者在失败时通过电子邮件通知您。这就是你必须建立自己的所有功能 - 尽管你现在可能不需要/想要它,但如果你以后做过,它就可以使用。所以,如果有人在几分钟之内就打破了所有的团队知道这个构建

1

像JUnit,NUnit等测试框架给你免费的很多功能,你不必自己实现。例如,JUnit会自动调用你的测试方法,setUp(),tearDown()等。它还有很多辅助断言方法。

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

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

0

的JUnit可以集成到连续的整合过程中,几乎无任何努力。这个功能本身就值得使用它。

当然还有其他有用的功能在其他答案中提到。 JUnit是一个你不想重塑的车轮。

如果您对JUnit有些疑问,请尝试TestNG - 它可能对您更好。

1

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