首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室软件测试频道
Google
首页 资讯动态 测试技术 测试工具 行业软件测试 测试管理 测试下载 经验分享 软件质量 其他技术 RSS订阅 博客 论坛
您现在的位置: 中国IT实验室 >> 软件测试 >> 测试技术 >> 单元测试 >> 正文

Java标准单元测试库

文章来源本站原创 作者佚名 更新时间2008-5-13 保存本文保存本文 推荐给好友推荐给好友 收藏本页收藏本页

       使用注释的优点是不再需要将所有的方法命名为 testFoo()、testBar(),等等。例如,下面的方法也可以工作:
  
  import org.junit.Test;
  import junit.framework.TestCase;
  
  public class AdditionTest extends TestCase {
  
  private int x = 1;
  private int y = 1;
  
  @Test public void additionTest() {
  int z = x + y;
  assertEquals(2, z);
  }
  
  }
  
  下面这个方法也同样能够工作:
  
  import org.junit.Test;
  import junit.framework.TestCase;
  
  public class AdditionTest extends TestCase {
  
  private int x = 1;
  private int y = 1;
  
  @Test public void addition() {
  int z = x + y;
  assertEquals(2, z);
  }
  
  }
  
  这允许您遵循最适合您的应用程序的命名约定。例如,我介绍的一些例子采用的约定是,测试类对其测试方法使用与被测试的类相同的名称。例如,List.contains() 由 ListTest.contains() 测试,List.add() 由 ListTest.addAll() 测试,等等。
  
  TestCase 类仍然可以工作,但是您不再需要扩展它了。只要您用 @Test 来注释测试方法,就可以将测试方法放到任何类中。但是您需要导入 junit.Assert 类以访问各种 assert 方法,如下所示:
  
  import org.junit.Assert;
  
  public class AdditionTest {
  
  private int x = 1;
  private int y = 1;
  
  @Test public void addition() {
  int z = x + y;
  Assert.assertEquals(2, z);
  }
  
  }
  
  您也可以使用 JDK 5 中新特性(static import),使得与以前版本一样简单:
  
  import static org.junit.Assert.assertEquals;
  
  public class AdditionTest {
  
  private int x = 1;
  private int y = 1;
  
  @Test public void addition() {
  int z = x + y;
  assertEquals(2, z);
  }
  
  }
  
  这种方法使得测试受保护的方法非常容易,因为测试案例类现在可以扩展包含受保护方法的类了。
  
  SetUp 和 TearDown
  
  JUnit 3 测试运行程序(test runner)会在运行每个测试之前自动调用 setUp() 方法。该方法一般会初始化字段,打开日志记录,重置环境变量,等等。例如,下面是摘自 XOM 的 XSLTransformTest 中的 setUp() 方法:
  
  protected void setUp() {
  
  System.setErr(new PrintStream(new ByteArrayOutputStream()));
  
  inputDir = new File("data");
  inputDir = new File(inputDir, "xslt");
  inputDir = new File(inputDir, "input");
  
  }
  
  在 JUnit 4 中,您仍然可以在每个测试方法运行之前初始化字段和配置环境。然而,完成这些操作的方法不再需要叫做 setUp(),只要用 @Before 注释来指示即可,如下所示:
  
  @Before protected void initialize() {
  
  System.setErr(new PrintStream(new ByteArrayOutputStream()));
  
  inputDir = new File("data");
  inputDir = new File(inputDir, "xslt");
  inputDir = new File(inputDir, "input");
  
  }
  
  甚至可以用 @Before 来注释多个方法,这些方法都在每个测试之前运行:
  
  @Before protected void findTestDataDirectory() {
  inputDir = new File("data");
  inputDir = new File(inputDir, "xslt");
  inputDir = new File(inputDir, "input");
  }
  
  @Before protected void redirectStderr() {
  System.setErr(new PrintStream(new ByteArrayOutputStream()));
  }
  
  清除方法与此类似。在 JUnit 3 中,您使用 tearDown() 方法,该方法类似于我在 XOM 中为消耗大量内存的测试所使用的方法:
  
  protected void tearDown() {
  doc = null;
  System.gc();
  }
  
  对于 JUnit 4,我可以给它取一个更自然的名称,并用 @After 注释它:
  
  @After protected void disposeDocument() {
  doc = null;
  System.gc();
  }
  
  与 @Before 一样,也可以用 @After 来注释多个清除方法,这些方法都在每个测试之后运行。
  
  最后,您不再需要在超类中显式调用初始化和清除方法,只要它们不被覆盖即可,测试运行程序将根据需要自动为您调用这些方法。超类中的 @Before 方法在子类中的 @Before 方法之前被调用(这反映了构造函数调用的顺序)。@After 方法以反方向运行:子类中的方法在超类中的方法之前被调用。否则,多个 @Before 或 @After 方法的相对顺序就得不到保证。
  
  套件范围的初始化
  
  JUnit 4 也引入了一个 JUnit 3 中没有的新特性:类范围的 setUp() 和 tearDown() 方法。任何用 @BeforeClass 注释的方法都将在该类中的测试方法运行之前刚好运行一次,而任何用 @AfterClass 注释的方法都将在该类中的所有测试都运行之后刚好运行一次。

上一页  [1] [2] [3] 下一页

【责编:Luzi】

中国IT教育

相关产品和培训
文章评论
 专题推荐

 ·建立可全面监控Squid代理服务器
 ·华为认证题库、模拟器下载专题
 ·嵌入式操作系统Linux资料下载(A)
 ·JAVA的应用编程接口——JAVA API详解…
 ·Linux Shell学习技术专题[上]…
 ·windows Server 2008专区…
 ·WEB开发ASP.NET和PHP、JSP究竟学哪个
 ·五步带你入门XML
 ·零距离接触OCP_Oracle认证体系全攻略
 ·揭秘:网络工程师职业发展路线图
 最近更新
 博客论点
 频道精选
 软件测试频道导航