本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7584328
建立时间:2006年5月29日




[集成测试]Junit 4新的特性
软件技术

lhwork 发表于 2006/10/10 10:01:20

    JUnit 4 已经出来很久了,基本上很多ide都开始支持,当然为了兼容性,一直不太敢用。以前都是懒得写单元测试,大多数的时候都是 System.out.print。不过现在已经是测试驱动的时代了,为了保持一个良好的习惯,还是需要好好的写写单元测试。断言远比 System.out.print有用。     看了几篇文章之后,对JUnit4已经有了基本的概念了。其实很多特性,testNg都已经实现了,挺讨厌testNg的xml文件,不过testNg的灵活性还是强大,对于大面积的组件测试比较适合。     JUnit 4应该说是使用新的架构写的,使用了很多java5的新特性。     一个最关键的改变,测试类,可以不用继承那该死的TestCase了.测试类,可以更加灵活,方法的定义不需要在前面增加test了。     对于测试类来说,只需要做以下简单的动作:     增加一个@Test,用于标注相应的测试方法。使用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);  }} 当然可以使用java 5的static import 功能import static org.junit.Assert.*;public class AdditionTest {  private int x = 1;  private int y = 1;  @Test public void addition() {    int z = x + y;    assertEquals(2, z);  }} 对于setUp 和tearDown来说,以后可以不用再继承这两个方法了。可以使用自定义的方法,只需要在前面增加@Before 和@After 注释即可。 @Before protected void initialize() {    System.setErr(new PrintStream(new ByteArrayOutputStream()));       inputDir = new File("data");    inputDir = new File(inputDir, "xslt");    inputDir = new File(inputDir, "input");        } @After protected void disposeDocument() {  doc = null;  System.gc();   } 并且可以注释多个方法。     当然JUnit4 也引入了一个 JUnit 3 中没有的新特性:类范围的 setUp() 和 tearDown() 方法。任何用 @BeforeClass 注释的方法都将在该类中的测试方法运行之前刚好运行一次,而任何用 @AfterClass 注释的方法都将在该类中的所有测试都运行之后刚好运行一次。     例 如,假设类中的每个测试都使用一个数据库连接、一个网络连接、一个非常大的数据结构,或者还有一些对于初始化和事情安排来说比较昂贵的其他资源。不要在每 个测试之前都重新创建它,您可以创建它一次,并还原它一次。该方法将使得有些测试案例运行起来快得多。 // This class tests a lot of error conditions, which// Xalan annoyingly logs to System.err. This hides System.err // before each test and restores it after each test.private PrintStream systemErr;@BeforeClass protected void redirectStderr() {    systemErr = System.err; // Hold on to the original value    System.setErr(new PrintStream(new ByteArrayOutputStream()));} @AfterClass protected void tearDown() {    // restore the original value    System.setErr(systemErr);}    异常测试是 JUnit 4 中的最大改进。旧式的异常测试是在抛出异常的代码中放入 try 块,然后在 try 块的末尾加入一个 fail() 语句。该方法不仅难看,而且试图挑战代码覆盖工具,因为不管测试是通过还是失败,总有一些代码不被执行。在 JUnit 4 中,您现在可以编写抛出异常的代码,并使用注释来声明该异常是预期的:  @Test(expected=ArithmeticException.class)  public void divideByZero() {    int n = 2 / 0;}    如果该异常没有抛出(或者抛出了一个不同的异常),那么测试就将失败。但是如果您想要测试异常的详细消息或其他属性,则仍然需要使用旧式的 try-catch 样式。    测试性能 是单元测试最为痛苦的方面之一。JUnit 4 没有完全解决这个问题,但是它对这个问题有所帮助。测试可以用一个超时参数来注释。如果测试运行的时间超过指定的毫秒数,则测试失败。 @Test(timeout=500) public void retrieveAllElementsInDocument() {    doc.query("//*");} 基本的特性就这么多,这些功能其实都可以在testNg中找到。不过JUnit还是不错的,对于单元测试来说,这是首选的。 当然为了兼容性,为了使 JUnit 4 测试可以运行在 JUnit 3 环境中,可以将它们包装在 JUnit4TestAdapter 中。将下面的方法添加到您的 JUnit 4 测试类中应该就足够了:  public static junit.framework.Test suite() {  return new JUnit4TestAdapter(AssertionTest.class);    }


阅读全文(3628) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.606 second(s), page refreshed 144760756 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号