论坛首页 Java企业应用论坛

使用Junit4的时候一个小问题

浏览 3783 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-01-30   最后修改:2010-07-23

 

 

     JUnit4.X出来已经很久了,一直没有去尝试使用一下,(这也是自己的一个不足,不太喜欢去尝试新新鲜的工具。我想这对于IT人员来,恐怕是一个很大的不足。)今天突然心血来潮去体验了一下。却发现一个奇怪的问题。如下描述:

我在自己的电脑上写了一个测试程序,用来体验Junit4.7的新功能,没有任何问题,但是呢,将自己的代码拷另外一机子上,然后打开就不行了。Eclipse老是提示assertThat(***)这个方法unresolved,我的第一反就是是没有导入hamcrest包,但是检查buildpath发现导入了hamcrest的core和library这两个包,也就是说是对的呀,但是MyEclipse就是说有问题。百思不得其解,今天在网上看到另外一篇blog,才明白了原因所在。

      原来我在新工程里面,添加junit4的jar包的时候,是添加了MyEclipse7.5自带的junit library.而在自己在之前做测试的时候,使用的是自己从网上下载的junit  jar包,然后手动导入的。junit4中有一个新的特性就是使用assertThat()这个测试方法。这个方法需要引入hamcrest包,使用hamcrest时不能用IDE提供的Junit4 JAR包,因为classloader不同。所以把工程中的junit4 library remove掉,然后手工导入下载的junit包,问题得到解决。

顺便介绍一下Junit4常用东东吧。

    Junit4.x中的annotations:

   @Test(expected=java.lang.ArimeticException,timeout=300),

   @Ignore:被忽略的测试方法,

   @Before:在所有测试方法之前运行,

   @After:在所有测试方法之后运行,

   @BeforeClass(static方法):在测试对象生成之前运行,可以用于开启数据库等一些操作

   @AfterClass(static方法):在所有测试方法结束之后运行。

 

 

Error与Failure:后者呢表示测试失败,而前者表示程序运行错误,此时是不管测试失败与否的。

 

测试类如下:

 

 

 

 

package cn.edu.ccnu.inc.lwm.junit; 
public class A {
 /** * @param args */ 
public int add(int x,int y) 
{ return x+y ; } 
public int sub(int x,int y ) 
{ return x-y ; } } 

 

 

 

 

 

 

 

 

 

 

 

 

 

针对A的测试类:

package cn.edu.ccnu.inc.lwm.junit.test; 
import static org.junit.Assert.*; 
import org.hamcrest.Matcher; 
import org.junit.After; 
import org.junit.AfterClass; 
import org.junit.Before; 
import org.junit.BeforeClass; 
import org.junit.Ignore;
import org.junit.Test;
import cn.edu.ccnu.inc.lwm.junit.A;
import static org.hamcrest.Matchers.* ;
/**
 * 注意:要使用assertThat()必须引入 org.hamcrest.Matchers.* ;
 * 
 * @date 2010-1-20 *
 * @author Administrator
 * 
 */ 
public class ATest { private A obj = null; 
/**
 * *
 * 
 * @BeforeClass
 * @AfterClass 必须是静态的. * 在实例还没有生成的时候就加载了。 *
 *             用在当我们要在测试之前获取一些资源的时候,比如说取得数据库连接,可以用@BeforeClass() *
 *             测试完毕后,释放资源的时候使用@afterClass() *
 */ 
}
@BeforeClass
public static void beforeClass() 
{ System.out.println("before class"); } 
@AfterClass 
public static void afterClass() 
{ System.out.println("after class"); } 
/**
 * *
 * 
 * @Before
 * @After 是指所有的测试方法执行之前或者之后 *
 * @throws Exception
 */
@Before
public void setUp() throws Exception 
{	 obj = new A();
	System.out.println("before"); 
} 
@After 
public void tearDown() throws Exception 
{ 
	System.out.println("after"); 
} 
/** * 表明这是一个测试方法 * */
@Test 
public void testAdd()
{ 
	int z = obj.add(3, 5) ; 
    assertEquals("应该是相等的",8, z) ;
    assertThat(z, is(8)) ; }
}
/**
 * *
 * 
 * @Ignore 标明这个测试方法要忽略掉. *
 */
@Ignore @Test public void testSub()
{ int z = obj.sub(9,2) ; 
   assertThat(z, is(7)) ; }
} 
}

 

 

 

 

 

   发表时间:2010-01-30  
junit4和TestNG比起来还是有差距,junit4比起junit3来并没有跨越式的变化,导致习惯junit3的人也没有心情切换到junit4
0 请登录后投票
   发表时间:2010-01-30  
嗯,junit3和4确实没有大的改变,感觉就是测试方法更加符合西方人的习惯吧。
TestNG我还没有胜过哦,汗
0 请登录后投票
   发表时间:2010-07-24  
junit一般的写小项目用的不是很多
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics