Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Java单元测试

1,052 views

Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Java单元测试

  1. 1. JAVA 单元测试 JUnit vs TestNG
  2. 2. 来源 1 来源 2
  3. 3. Junit <ul><li>JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架。Junit测试是程序员测试,即所谓白盒测试。 </li></ul><ul><li>项目主页:http://www.junit.org/ </li></ul>
  4. 4. JUnit3 vs JUnit4 <ul><li>1.extend TestCase vs POJO </li></ul><ul><li>2.@OverWrite TestCase. setUp,tearDown vs @BeforeClass @AfterClass / @Before @After </li></ul><ul><li>3. testXXX vs @Test </li></ul><ul><li>4.Exception </li></ul><ul><li>5. @Ignore </li></ul><ul><li>6. timeout </li></ul><ul><li>7. @Parameter </li></ul><ul><li>8. @Suite </li></ul><ul><li>引用来源 </li></ul>
  5. 5. @Test <ul><li>public class JUnitBasicTest { </li></ul><ul><li>private static AClass aClass; </li></ul><ul><li>@BeforeClass </li></ul><ul><li>public static void init() throws Exception { </li></ul><ul><li>aClass = new AClass(); </li></ul><ul><li>} </li></ul><ul><li>@AfterClass </li></ul><ul><li>public static void clear() throws Exception { </li></ul><ul><li>aClass = null; </li></ul><ul><li>} </li></ul><ul><li>@Before </li></ul><ul><li>public void before() throws Exception { </li></ul><ul><li>System.out.println(&quot;@Before&quot;); </li></ul><ul><li>} </li></ul><ul><li>@After </li></ul><ul><li>public void after() throws Exception { </li></ul><ul><li>System.out.println(&quot;@After&quot;); </li></ul><ul><li>} </li></ul><ul><li>@Test </li></ul><ul><li>public void isMe() { </li></ul><ul><li>assertTrue(&quot;should be me!&quot;, aClass.isMe(&quot;yaomj&quot;)); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>执行顺序 @BeforeClass @Before isMe() @After @AfterClass
  6. 6. Exception <ul><li>public void testExceptionIn JUint3 () { </li></ul><ul><li>ArrayList emptyList = new ArrayList(); </li></ul><ul><li>try{ </li></ul><ul><li>Object o = emptyList.get(0); </li></ul><ul><li>fail(&quot;Should raise an IndexOutOfBoundsException&quot; ); </li></ul><ul><li>} catch (IndexOutOfBoundsException expected) { </li></ul><ul><li>assertTrue(true ); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>@Test(expected = IndexOutOfBoundsException.class ) </li></ul><ul><li>public void exceptionIn JUint4 () { </li></ul><ul><li>ArrayList emptyList = new ArrayList(); </li></ul><ul><li>Object o = emptyList.get(0); </li></ul><ul><li>} </li></ul>
  7. 7. @Ignore <ul><li>@Ignore(&quot; 革命尚未成功,同志仍需努力! &quot;) </li></ul><ul><li>@Test </li></ul><ul><li>public void notCompleteMethod() throws Exception { </li></ul><ul><li>//TODO </li></ul><ul><li>} </li></ul><ul><li>对于你想暂时不进行测试的方法 , 在该方法前添加 @Ignore </li></ul>
  8. 8. timeout <ul><li>@Test ,使用 &quot;timeout&quot; 参数。如果测试运行的时间超过指定的毫秒数,则测试失败。 </li></ul><ul><li>@Test(timeout = 1000) </li></ul><ul><li>public void doSomeTimeConsumingWork() { </li></ul><ul><li>while (true){ </li></ul><ul><li>// 愚公移山 ing... </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  9. 9. TestNG <ul><li>作者 Cédric Beust </li></ul><ul><li>主页 :http://testng.org/doc/index.html </li></ul><ul><li>TestNG 从 JUnit3 获得灵感 , 并增加一些新特性 ( 青 出于 蓝 ) </li></ul><ul><li>1. 注解 (JUnit4 借鉴 TestNG 的这个特性 ) </li></ul><ul><li>2. 多线程支持 </li></ul><ul><li>3. 灵活的测试配置 </li></ul><ul><li>4. 数据驱动测试 (@DataProvider) </li></ul><ul><li>5. 参数化 </li></ul><ul><li>6. 更强大的执行模式 (no more TestSuite) </li></ul><ul><li>7. IDE plugins (Eclipse, IDEA, Maven, etc...) </li></ul><ul><li>8. 方法依赖测试 </li></ul><ul><li>eclipse plugin:http://beust.com/eclipse-old/ </li></ul>
  10. 10. @Test <ul><li>alwaysRun 如果设置为 true ,这个测试方法将总是运行,甚至当它依赖的方法失败时。 </li></ul><ul><li>dataProvider 这个测试方法的 data provider 的名称 </li></ul><ul><li>dataProviderClass 用于查找 data provider 的类。如果不指定,将在当前测试方法所在的类或者它的基类上查找 data provider 。 如果这个属性被指定 , 则 data provider 方法需要是指定类的 static 方法。 </li></ul><ul><li>dependsOnGroups 当前方法依赖的组列表 </li></ul><ul><li>dependsOnMethods 当前方法依赖的方法列表 </li></ul><ul><li>description 当前方法的描述 </li></ul><ul><li>enabled 当前类的方法 / 方法是否被激活 </li></ul><ul><li>expectedExceptions 测试方法期望抛出的异常列表。如果没有异常或者抛出的不是列表中的任何一个,当前方法都将标记为失败 . </li></ul><ul><li>groups 当前类 / 方法所属的组列表 </li></ul><ul><li>invocationCount 当前方法被调用的次数 </li></ul><ul><li>successPercentage 当前方法期望的成功率 </li></ul><ul><li>sequential 如果设置为 true ,当前测试类上的所有方法保证按照顺序运行。甚至测试们在 parallel=&quot;true&quot; 的情况下 . 这个属性只能用于类级别,如果用于方法级别将被忽略。 </li></ul><ul><li>timeOut 当前方法容许花费的最大时间,单位毫秒。 </li></ul><ul><li>threadPoolSize 当前方法的线程池大小。方法将被多线程调用,次数 </li></ul><ul><li>invocationCount 参数指定 注意:如果 invocationCount 没有指定则这个属性将被忽略 </li></ul>
  11. 11. Group( 分组 ) <ul><li>1. 类 / 方法 分组 @Test(groups = { &quot;group1&quot; }) </li></ul><ul><li>2.Groups of groups( 组中组 ) </li></ul><ul><li>3. 包含组 (include) 排除组 (exclude) </li></ul>
  12. 12. Parameters( 参数 ) <ul><li>1.Parameters from testng.xml </li></ul><ul><li>@Parameters 可使用在任何有 @Test, @Before/After 或者 @Factory 注解的方法上 </li></ul><ul><li>2.Parameters with DataProviders </li></ul><ul><li>@Test(dataProvider = &quot;xxx&quot;,dataProviderClass = xxx.class) </li></ul>
  13. 13. Make Pesentation much more fun keep the bar green to keep the code clean! Thank you! :)

×