TestNG简介--如果你觉得JUnit不够强大,TestNG几乎能解决你的一切问题

 

今天我们再来看一个重要的测试框架,TestNG (Test Next Generation)。

大家对JUnit应该已经很熟悉了,JUnit是我们开发人员常用的UT框架。我现在用JUnit+Mockito用的很好。

网上有一些JUnit vs TestNG的文章,但是普遍认为,TestNG提供了JUnit没有的更强大的功能。

 

一篇很简单的入门文章:

http://www.ibm.com/developerworks/java/library/j-testng/


官网:http://testng.org/doc/index.html

一开始就介绍了TestNG的几个所谓的“亮点”:

TestNG is a testing framework inspired from JUnit and NUnit but introducing some new functionalities that make it more powerful and easier to use, such as:

  • Annotations. 提供了比JUnit更多的annotations
  • Run your tests in arbitrarily big thread pools with various policies available (all methods in their own thread, one thread per test class, etc...).
  • Test that your code is multithread safe.
  • Flexible test configuration.
  • Support for data-driven testing (with @DataProvider).
  • Support for parameters.
  • Powerful execution model (no more TestSuite).
  • Supported by a variety of tools and plug-ins (Eclipse, IDEA, Maven, etc...).
  • Embeds BeanShell for further flexibility.
  • Default JDK functions for runtime and logging (no dependencies).
  • Dependent methods for application server testing.

TestNG is designed to cover all categories of tests:  unit, functional, end-to-end, integration, etc...

这样看来TestNG真的很强大!


TestNG user manuel:

http://testng.org/doc/documentation-main.html

其实扫一眼这个手册就能对TestNG有一个大概的认识。TestNG和JUnit最大的不同是:

我们写独立的unit test case时,在代码中使用JUnit提供的annotation,之后在IDE里运行Run as JUnit。或者运行Maven test等运行unit test并查看结果。

而在使用TestNG时,除了在UT代码中和JUnit使用类似的annotation以外,实际上还使用配置文件来配置运行什么test case。比如testing.xml,在这个文件中,我们可以配置要运行的class,method甚至package。

也就是说,如果在一个testing.xml中测试单个class,那么这就是一个UT。

如果在一个testing.xml中测试多个class或package,那么这就可以是一个集成测试或端到端测试。

这也是为什么说,TestNG覆盖了几乎所有种类的测试,包括UT,功能测试,端到端测试,集成测试 等等的原因。


而运行TestNG的方式也更灵活。我们可以选择在命令行中运行TestNG,或者使用ant,或在IDE中。

命令行提供了非常灵活的参数,让我们在运行测试时还可以控制要运行哪些test case,这样就不会被已经写好的配置文件或代码所限制,在每次运行测试时还可以根据需要,随意的控制。

一个例子:

java org.testng.TestNG testng1.xml [testng2.xml testng3.xml ...]

因此,运行TestNG实际就是运行xml文件中配置的那些test。TestNG会按照xml文件中指明的package或class去寻找source code中的annotation,并进行相应的操作。

很明显,我们甚至可以同时运行多个testing.xml,这样组合将更加灵活。比如系统由两个独立的组件构成,那么就可以创建两个配置文件:testingProgramA.xml, testingProgramB.xml。

这样就可以很方便的控制是进行一次小范围的集成测试,还是一个端到端测试。

因此TestNG的强大之处在于:

1, 更丰富的annotation。

2, 使用xml配置文件可以任意组合出需要的各种测试。

3, 命令行参数让每一次测试更灵活。

而前面还提到了内嵌Beanshell提供了更多的灵活性,这点之后再继续体会。

 

功能太多不能一一详述,建议各位还是去看英文版手册。


你可能感兴趣的:(thread,JUnit,测试,Class,dependencies,methods)