﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-少年阿宾-随笔分类-Junit</title><link>http://www.blogjava.net/stevenjohn/category/52939.html</link><description>那些青春的岁月</description><language>zh-cn</language><lastBuildDate>Tue, 13 Nov 2012 20:59:56 GMT</lastBuildDate><pubDate>Tue, 13 Nov 2012 20:59:56 GMT</pubDate><ttl>60</ttl><item><title>java实现多个文件压缩</title><link>http://www.blogjava.net/stevenjohn/archive/2012/11/13/391278.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Tue, 13 Nov 2012 15:25:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2012/11/13/391278.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/391278.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2012/11/13/391278.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/391278.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/391278.html</trackback:ping><description><![CDATA[<p>import java.io.*;<br />import java.util.*;<br />import java.util.zip.ZipOutputStream;<br />import java.util.zip.ZipEntry;<br />import java.util.zip.ZipFile;<br />public class FileMgr {<br />public FileMgr() {<br />}<br />/**<br />&nbsp;&nbsp; * 压缩文件<br />&nbsp;&nbsp; * @param srcfile File[] 需要压缩的文件列表<br />&nbsp;&nbsp; * @param zipfile File&nbsp;&nbsp;&nbsp; 压缩后的文件<br />&nbsp;&nbsp; */<br />public static void ZipFiles(java.io.File[] srcfile, java.io.File zipfile) {<br />&nbsp;&nbsp;&nbsp; byte[] buf = new byte[1024];<br />&nbsp;&nbsp;&nbsp; try {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Create the ZIP file<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipfile));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Compress the files<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; srcfile.length; i++) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileInputStream in = new FileInputStream(srcfile[i]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Add ZIP entry to output stream.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.putNextEntry(new ZipEntry(srcfile[i].getName()));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Transfer bytes from the file to the ZIP file<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int len;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while ( (len = in.read(buf)) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.write(buf, 0, len);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Complete the entry<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.closeEntry();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in.close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Complete the ZIP file<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("压缩完成.");<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; catch (IOException e) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />&nbsp;&nbsp;&nbsp; }<br />}<br />/**<br />&nbsp;&nbsp; * 解压缩<br />&nbsp;&nbsp; * @param zipfile File 需要解压缩的文件<br />&nbsp;&nbsp; * @param descDir String 解压后的目标目录<br />&nbsp;&nbsp; */<br />public static void UnZipFiles(java.io.File zipfile, String descDir) {<br />&nbsp;&nbsp;&nbsp; try {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Open the ZIP file<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ZipFile zf = new ZipFile(zipfile);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (Enumeration entries = zf.entries(); entries.hasMoreElements(); ) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Get the entry name<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ZipEntry entry = ( (ZipEntry) entries.nextElement());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String zipEntryName = entry.getName();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InputStream in = zf.getInputStream(entry);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // System.out.println(zipEntryName);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OutputStream out = new FileOutputStream(descDir + zipEntryName);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] buf1 = new byte[1024];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int len;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while ( (len = in.read(buf1)) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.write(buf1, 0, len);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Close the file and stream<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in.close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("解压缩完成.");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; catch (IOException e) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />&nbsp;&nbsp;&nbsp; }<br />}<br />}</p>
<p><br />本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/Jonthanoscar/archive/2007/08/09/1733812.aspx">http://blog.csdn.net/Jonthanoscar/archive/2007/08/09/1733812.aspx</a></p><br /><br /><br /><br /><br />测试方法（junit4测试）：<br />
<p>package lc.abin.lee.basic.zip.test;</p>
<p>import java.io.File;</p>
<p>import lc.abin.lee.basic.zip.FileMgr;</p>
<p>import org.junit.AfterClass;<br />import org.junit.BeforeClass;<br />import org.junit.Test;</p>
<p>public class testFileZip {<br />&nbsp;@BeforeClass<br />&nbsp;public static void init(){<br />&nbsp;&nbsp;System.out.println("initialize zip");<br />&nbsp;}<br />&nbsp;@Test<br />&nbsp;public void testCreateZIP(){<br />&nbsp;&nbsp;File in=new File("D:\\abin.zip");<br />&nbsp;&nbsp;File[] file=new File[]{in};<br />&nbsp;&nbsp;File zip=new File("D:\\abin.zip");<br />&nbsp;&nbsp;FileMgr mgr=new FileMgr();<br />&nbsp;&nbsp;mgr.ZipFiles(file, zip);<br />&nbsp;}<br />&nbsp;@Test<br />&nbsp;public void testParseZIP(){<br />&nbsp;&nbsp;File in=new File("D:\\abin.zip");<br />&nbsp;&nbsp;String filePath="D:/home/";<br />&nbsp;&nbsp;FileMgr mgr=new FileMgr();<br />&nbsp;&nbsp;mgr.UnZipFiles(in, filePath);<br />&nbsp;}<br />&nbsp;<br />&nbsp;@AfterClass<br />&nbsp;public static void destroy(){<br />&nbsp;&nbsp;System.out.println("destroy zip");<br />&nbsp;}<br />}<br /></p><img src ="http://www.blogjava.net/stevenjohn/aggbug/391278.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2012-11-13 23:25 <a href="http://www.blogjava.net/stevenjohn/archive/2012/11/13/391278.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Junit 测试方法</title><link>http://www.blogjava.net/stevenjohn/archive/2012/11/02/390680.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Fri, 02 Nov 2012 06:40:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2012/11/02/390680.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/390680.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2012/11/02/390680.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/390680.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/390680.html</trackback:ping><description><![CDATA[简单的JUnit测试 
<p>本文介绍在NetBeans开发工具中编写和运行JUnit单元测试的基础部分。测试一个应用程序是开发周期的一部分，编写和维护单元测试可以保证你源代码中独立的方法可以正常工作。</p>
<p>NetBeans IDE 6.9 中包含JUnit 3.5和JUnit 4.5两个版本，可自行选择。（关于使用JUnit的更多信息，参考www.junit.org。）</p>目录<br />一、新建Java测试包<br />二、创建Java类库<br />三、JUnit注释<br />四、简单的JUnit4测试方法<br />五、运行测试<br />
<p><br />一、新建Java测试包</p>用于存放JUnit测试类库的包<br />1.右击&#8220;测试包&#8221;&gt;&#8220;新建&#8221;&gt;&#8220;Java包&#8221;。<br />2.在&#8220;新建Java包&#8221;对话框中，输入包名，选择位置（位置最好为&#8220;测试包&#8221;，以便于区分源码包与测试包）。<br />3.&#8220;完成&#8221;即可。<br />
<p>二、创建java类库测试</p>用于为java类库文件创建测试。<br />1.右击要创建测试的类文件，选择&#8220;工具&#8221;&gt;&#8220;创建 JUnit 测试&#8221;。<br />2.在&#8220;选择 JUnit 版本&#8221;对话框中，选择&#8220;JUnit 4&#8221;。<br />3.弹出&#8220;创建测试&#8221;对话框，在&#8220;创建测试&#8221;对话框中可以创建的测试命名、选择位置（最好选择测试包）。<br />注：NetBeans中第一次使用 IDE 创建测试框架时，IDE 会提示选择 JUnit 版本。选择JUnit4后会自动删除JUnit 3库，下次再创建时，会默认创建JUnit4的测试。<br />
<p>三、JUnit注释</p>JUnit注释跟在测试方法前，对测试方法的类型进行说明。<br />
<p>1.JUnit测试注释</p><strong>测试注释</strong>：@Test 标注将方法标记为测试方法。<br />
<p>2.测试类、测试的初始化函数和释放方法</p>在 JUnit 4 中，可以使用标注来标记以下类型的初始化函数和释放方法。<br /><strong>测试类初始化函数</strong>：@BeforeClass 标注将方法标记为测试类初始化方法。测试类初始化方法只能运行一次，并且在测试类中的任何其他方法之前运行。 <br /><strong>测试类释放方法</strong>：@AfterClass 标注将方法标记为测试类释放方法。测试类释放方法只能运行一次，并且在测试类中的任何其他方法完成之后运行。 <br /><strong>测试初始化函数</strong>：@Before 标注将方法标记为测试初始化方法。测试初始化方法在测试类中的各测试用例之前运行。运行测试不需要测试初始化方法，但是，如果需要在<br />运行测试之前初始化一些变量，则可以使用测试初始化方法。 <br /><strong>测试释放方法</strong>：@After 标注将方法标记为测试释放方法。测试释放方法在测试类中的各测试用例之后运行。运行测试不需要测试释放方法，但是，可能需要使用释放方法<br />来清理运行测试用例时所需的任何数据。 <br />
<p>3.禁用测试注释</p><strong>禁用测试</strong>：@Ignore 标注将该方法禁用。<br />
<p>四、简单的JUnit4测试方法</p>创建java类库测试后，分生成该类所有方法的测试方法。（测试方法很多）<br /><strong>断言</strong>：<br />1.assertEquals( 期望值, 实际值 ) // 实际值用被测试方法代替时就是对该方法的测试<br />2.assertTrue( 实际值 )<br />3.assert False(实际值)<br />注：此方法使用 JUnit assertTrue 和 assertFalse 方法来测试各种可能的结果。要通过此方法的测试，assertTrue 必须全部为 true，并且 assertFalse 必须<br />全部为 false。<br /><strong>超时</strong>：<br />4.@Test(timeout=1000) // 超时被设置为 1000 毫秒。<br /><strong>异常</strong>:<br />5.@Test(expected=IllegalArgumentException.class) // 返回异常<br /><strong>禁用测试</strong>:<br />6.@Ignore // 在@Test 上方添加 @Ignore 标注来禁用测试。<br />
<p>五、运行测试</p>1.运行单个测试：<br />右击要运行的测试，选择&#8220;运行文件&#8221;。<br />2.运行整个测试：<br />1)右击要运行的测试包，选择&#8220;新建&#8221;&gt;&#8220;其它&#8221;打开&#8220;新建向导&#8221;。<br />2)类别选择&#8220;JUnit&#8221;，文件类型选择&#8220;测试套件&#8221;，点击&#8220;下一步&#8221;。<br />3)输入测试名，选择位置，及要测试的包。<br />4)&#8220;完成&#8221;即可。<br />此时运行这个测试套件即可运行包内的所有测试。<br /><img src ="http://www.blogjava.net/stevenjohn/aggbug/390680.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2012-11-02 14:40 <a href="http://www.blogjava.net/stevenjohn/archive/2012/11/02/390680.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Junit单元测试框架介绍</title><link>http://www.blogjava.net/stevenjohn/archive/2012/11/02/390676.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Fri, 02 Nov 2012 06:16:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2012/11/02/390676.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/390676.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2012/11/02/390676.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/390676.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/390676.html</trackback:ping><description><![CDATA[<div class="blog_content">软件测试 <br />___________________________________________________________________________ <br />Unit Test是由程序员本身来编写的。 <br /><br />以下介绍Junit单元测试框架：官网地址www.junit.org <br /><br />JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架（regression testing framework）。Junit测试是程序员测试，即所谓白盒测试，因为程序员知道被测试的软件如何（How）完成功能和完成什么样（What）的功能。 <br /><br />Junit3.x <br />___________________________________________________________________________ <br /><br />Junit3.x中使用包junit.framework.* <br /><br />1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 必须继承TestCase类 <br /><br />public class CalculatorTest extends TestCase { <br /><br />&nbsp;&nbsp;&nbsp; private Calculator cal; <br /><br />&nbsp;&nbsp;&nbsp; public CalculatorTest() { <br /><br />&nbsp;&nbsp;&nbsp; } <br /><br />&nbsp;&nbsp;&nbsp; public CalculatorTest(String name) { <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super(name); <br /><br />&nbsp;&nbsp;&nbsp; } <br /><br />&nbsp;&nbsp;&nbsp; public void setUp() { <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("...........setUp.............."); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cal = new Calculator(); <br /><br />&nbsp;&nbsp;&nbsp; } <br /><br />&nbsp;&nbsp;&nbsp; public void testAdd() { <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int result = cal.add(1, 2); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.assertEquals("计算添加失败", 3, result); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br /><br />public void tearDown() { <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("........tearDown........"); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br /><br />} <br /><br /><br /><br />2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 测试用例（Test Case）是单元测试的一个非常重要的方面。 <br /><br />3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 单元测试主要是用来判断程序的执行结果与自己期望的结果是否一致。 <br /><br />4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在Junit3.x中，测试方法规则定义如下： <br /><br />1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public <br /><br />2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void <br /><br />3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 无参数的 <br /><br />4)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 测试方法名以test开头 <br /><br />5.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Test Case之间一定要保持完全的独立性，不允许出现任何的依赖关系。 <br /><br />6.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们不能依赖于测试方法的执行顺序。 <br /><br />7.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关于setUp与tearDown方法的执行顺序： <br /><br />1） setUp <br /><br />2） testAdd <br /><br />3） tearDown <br /><br />8.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Junit两种类型错误，Failure 和 Error <br /><br />Failure：指预期结果与实际结果不同，例如当你使用assertEquals或者assertXXX方法断言失败时，或者调用fail方法，就会报出Failure，这时要检查测试方法逻辑设计是否有误。 <br /><br />&nbsp;&nbsp;&nbsp; public void testDevide() { <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(".........testDevide()........"); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int expected = 0; <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int actual = 0; <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try { <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; actual = cal.devide(1, 3); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception e) { <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.fail("测试失败"); //不应该执行这段. <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.assertEquals(expected, actual); <br /><br />&nbsp;&nbsp;&nbsp; } <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Error：指程序在断言执行之前，程序就因为某种错误而引发异常，导致程序终止，例如测试方法中因抛出某个异常，使得测试方法无法正确执行到断言就结束，这时你要检查测试的方法是否有未考虑到的情况而引起流程突然中断。 <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 也就是说代码中抛出了异常等影响代码正常执行的情况，比如ArrayIndexOfBoundsException、NullPointException，也可能是磁盘已满、网络中断等等外部环境失败所带来的影响。 <br /><br />首先处理Error，然后在处理Failure. <br /><br />9.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 运行测试用例 <br /><br />1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IDE中，如Eclipse工具已经内置了Junit，所以可以直接在测试类中鼠标右键Run--Junit Test运行。 <br /><br /><br /><br />2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用junit.textui.TestRunner类运行测试类. <br /><br />public static void main(String[] args) { <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; junit.textui.TestRunner.run(MyStackTest.class); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; junit.textui.TestRunner.run(new CalculatorTest("testAdd")); <br /><br />} <br /><br />3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用TestSuite <br /><br />a)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一次可以运行多个测试类进行测试 <br /><br />public class TestAll { <br />&nbsp;&nbsp;&nbsp; public static Test suite() { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TestSuite suite = new TestSuite(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suite.addTestSuite(OOOTest.class); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suite.addTestSuite(XXXTest.class); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suite.addTestSuite(YYYTest.class); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return suite; <br />&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp; public static void main(String[] args) { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TestRunner.run(suite()); <br />&nbsp;&nbsp;&nbsp; } <br />} <br /><br />b)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过IDE自动发现suite()方法，必须继承TestCase <br /><br />public class TestAll extends TestCase { <br />&nbsp;&nbsp;&nbsp; public static Test suite() { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TestSuite suite = new TestSuite(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suite.addTestSuite(OOOTest.class); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suite.addTestSuite(XXXTest.class); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suite.addTestSuite(YYYTest.class); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return suite; <br />&nbsp;&nbsp;&nbsp; } <br />} <br /><br />c)&nbsp;&nbsp; 组合模式，组合方式多元化 <br /><br />&#8230;&#8230; <br /><br />public static Test suite() { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TestSuite suite = new TestSuite(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suite.addTest(new XXXTest("testABC"));&nbsp; // 执行testABC()方法 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suite.addTest(YYYTest.suite()); // suite() 传回TestSuite实例 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suite.addTestSuite(OOOTest.class);//自动查找OOOTest类中testXXX方法 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return suite; <br />&nbsp;&nbsp;&nbsp; } <br /><br />10.测试之前是什么状态，在测试执行完成后就应该是什么状态，而不应该由于测试执行的原因到导致了状态发生了变化。 <br /><br />Junit4.x <br />___________________________________________________________________________ <br /><br />Junit4.x开始支持Annotation注解技术，在编写测试用例时简化不少动作. <br />Junit4.x中使用的包org.junit.* <br /><br />Junit4.x是兼容以前版本 <br /><br />Eclipse中自带了Junit4，版本为junit4.3.1. BC-EC工程中使用的版本为Junit4.4，目前最新版本4.11 <br /><br /><br /><br />1. 无需继承TestCase类，所有被@Test注解所修饰的public，void，无参数的方法都是测试用例，Junit自动查找注解方法并执行测试。 <br /><br />@Test <br /><br />&nbsp;&nbsp;&nbsp; public void testAdd() { <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int result = cal.add(1, 2); <br /><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.assertEquals("计算添加失败", 3, result); <br /><br />} <br /><br />2. 虽然Junit4.x中测试类中的方法名称可以随便取，但是建议跟junit3.x中测试类方法命名约定一致，统一方法名以test开头。 <br /><br />3. 使用@Before注解所修饰的方法同junit3.x中的setUp方法的功能，使用@After注解所修改的方法同junit3.x测试类中的tearDown方法的功能。 @Before和@After可以在多次指定. <br /><br />@Before <br /><br />&nbsp;&nbsp;&nbsp; public void init() { <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("...........setUp.............."); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cal = new Calculator(); <br /><br />} <br /><br /><br /><br />@After <br /><br />&nbsp;&nbsp;&nbsp; public void destroy() { <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("........tearDown........"); <br /><br />} <br /><br />4. 通过@BeforeClass和@AfterClass注解标注public，static，void，无参数的类方法。在所有测试方法执行之前和之后执行。 <br /><br />@BeforeClass <br />public static void setUpBeforeClass() { <br />&nbsp;&nbsp;&nbsp; ... <br />} <br />@AfterClass <br />public static void tearDownAfterClass() { <br />&nbsp;&nbsp;&nbsp; ... <br />} <br /><br />5. 使用@Ignore注解所修饰的方法（可以表示尚未编写完该用例或者想禁用该用例），运行器会忽略该方法的测试；当修饰类时，运行器会忽略掉所有测试方法。 <br /><br />@Test <br /><br />&nbsp;&nbsp;&nbsp; @Ignore("尚未完成") <br /><br />&nbsp;&nbsp;&nbsp; public void testMultiply() { <br /><br />&nbsp;&nbsp;&nbsp; &#8230; &#8230; <br /><br />} <br /><br />Eclipse中Junit执行结果中会提示如下： <br /><br /><br /><br /><br /><br />6. 预期异常： <br /><br />也可以使用在junit3.x中提到的fail()来测试预期抛出异常的情况。 <br /><br />public void testDevideByZero() { <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Throwable tx = null; <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try { <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cal.devide(1, 0); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.fail("应该按预期抛出异常，测试失败"); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception e) { <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tx = e; <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.assertNotNull(tx.getMessage()); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.assertEquals(ArithmeticException.class, tx.getClass()); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.assertEquals("除数不能为0！", tx.getMessage()); <br /><br />} <br /><br />junit4中使用Test中的expected属性达到相同的功能，代码量小很多. <br /><br />&nbsp;&nbsp;&nbsp; @Test(expected = ArithmeticException.class) <br /><br />public void testDevideByZero() throws Exception { <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cal.devide(1, 0); // 应该抛出异常 <br /><br />} <br /><br />7. 使用@Test(timeout = 2000) 注解预期某些操作应该在指定时间内完成，否则测试失败。&nbsp;&nbsp;&nbsp; 单位是毫秒。 <br /><br />8. 测试运行器：可以使用@RunWith注解使用的runner. <br /><br />Junit4中内置的运行器有： <br /><br />a) 附带兼容junit3.x运行器 <br /><br />org.junit.internal.runners.Junit38ClassRunner <br /><br />b) 参数化运行器，可设定一组参数，每次运行测试时自动在指定位置给予不同的参数。 <br /><br />org.junit.runners.Parameterized <br /><br />c) Suite运行器，如同Junit3.x中的TestSuite, 用于任意组合测试. <br /><br />org.junit.runner.Suite <br /><br />9. 参数化运行器： <br /><br />a) 使用注解@RunWith(value = Parameterized.class) 指定参数化运行器, <br /><br />b) 定义好一个方法，返回一组参数数据，使用注解@Parameterized.Parameters <br /><br />c) 测试类构造方法中为各个参数赋值（构造方法是由Junit调用的） <br /><br />d) 方法必须是public，static，void，no-arg，返回一个Collection。 <br /><br />e) 方法中每个元素必须是一个一维数组，数组中第一个为预期值，之后参数一，参数二等。 <br /><br />@RunWith(value = Parameterized.class) <br /><br />public class ParamCalculatorTest { <br /><br /><br /><br />&nbsp;&nbsp;&nbsp; private Calculator cal; <br /><br />&nbsp;&nbsp;&nbsp; private int expected; <br /><br />&nbsp;&nbsp;&nbsp; private int para1; <br /><br />&nbsp;&nbsp;&nbsp; private int para2; <br /><br /><br /><br />&nbsp;&nbsp;&nbsp; @Parameterized.Parameters <br /><br />&nbsp;&nbsp;&nbsp; public static Collection&lt;Integer[]&gt; getParamData() { <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Integer[][] data = new Integer[][] { { 5, 3, 2 }, { 3, 1, 2 }, { 2, 1, 1 } }; <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return Arrays.asList(data); <br /><br />&nbsp;&nbsp;&nbsp; } <br /><br /><br /><br />&nbsp;&nbsp;&nbsp; @Before <br /><br />&nbsp;&nbsp;&nbsp; public void init() { <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cal = new Calculator(); <br /><br />&nbsp;&nbsp;&nbsp; } <br /><br /><br /><br />public ParamCalculatorTest(int expected, int para1, int para2) { <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.expected = expected; <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.para1 = para1; <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.para2 = para2; <br /><br />&nbsp;&nbsp;&nbsp; } <br /><br /><br /><br />&nbsp;&nbsp;&nbsp; @Test <br /><br />&nbsp;&nbsp;&nbsp; public void testAdd() { <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int result = cal.add(para1, para2); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.assertEquals(expected, result); <br /><br />} <br /><br /><br /><br />&nbsp;&nbsp;&nbsp; @After <br /><br />&nbsp;&nbsp;&nbsp; public void destory() { <br /><br />&nbsp;&nbsp;&nbsp; } <br /><br />} <br /><br /><br /><br />10.Suite运行器：在Junit4中，如果想同时运行多个测试，需要使用两个注解： <br /><br />@RunWith(value = Suite.class) <br />@SuiteClasses <br /><br />使用以上两个注解会通过Suite运行器来执行测试，在SuiteClasses中指定测试类，也可以继续指定Suite，这样Junit会在去查找里面的测试类并执行。 <br /><br />&nbsp;&nbsp;&nbsp; @RunWith(value = Suite.class) <br /><br />@SuiteClasses( { CalculatorTest.class, MyStackTest.class }) <br /><br />public class SuiteCalculatorMyStackTest { <br /><br />&nbsp;&nbsp;&nbsp; &#8230; &#8230; <br /><br />} <br /><br /></div> <img src ="http://www.blogjava.net/stevenjohn/aggbug/390676.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2012-11-02 14:16 <a href="http://www.blogjava.net/stevenjohn/archive/2012/11/02/390676.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>