论坛首页 Java企业应用论坛

junit4学习探讨

浏览 6893 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (6)
作者 正文
   发表时间:2011-03-07   最后修改:2011-03-07

初学junit, 现总结一下自己对junit使用.

 

1.使用@Test

在方法上输入@Test , 然后使用ctrl+1,引入org.junit.Test(junit4.5.jar包)

 

@Test
public void testConn() throws SQLException{
//method
}

 

 然后再outline视图下, 在testConn()方法上 右键run -> junit test, 即可运行,自动打开JUnit 视图.

如下图:



 绿色,表示,测试通过. 若出现红色,表示有错误,在下方的Failure trace下,查看错误信息,进行调试.

注意:(1)当使用@Test时, 方法必须为public ,void 

 

2. 继承TestCase使用

今天TL让写一个功能单元测试,我说只会使用@Test,不知怎么写. 直接遭到TL鄙视.赶快回去查了junit的一些资料学习.

2.1 只要测试类 继承junit.framework.TestCase.

然后写个以test开头的方法名称. 如testMethodName(){}. 然后即可右键run as=> junit Test. 

 

public class UploadPlatformMessageTest extends TestCase {
{
     public void testTransormAndUpload(){
          //method
     }
}

2.2 在类中添加main方法:

 

	public static void main(String[] args) {
		TestRunner.run( YOURCALSSNAME.class);
	}

 

 这样直接 run as, -> java application , 也运行程序中所有以test开头的方法.

 

 

3. 当类继承TestCase时, 若定义多个test*()方法 ,右键运行run junit Test, 运行的是哪个testcase?

尝试写连个test*()方法, run as ->junit test, 发现 两个方法都执行.

3.1 怎么运行其中的一个test*方法?

解决:(1) 通过运行main()方法来设置运行哪个test方法:

TestSuite ts = new new TestSuite();

 

ts.addTest(new UploadPlatformMessageTest("testAsbc"));

TestRunner.run(test);

 

 

 

 

4. ? ? ? 使用@Test方法时, 此方法必需为public void , 对于有返回值的方法无法使用@Test, 有没有其它替代的解决方案?

使用assertEquals( Object ,  Object);

e.g.:

 

	public int abc(int i){
		return i;
	}

       @Test
	public void testAbc(){
  	        assertEquals(2, abc(2));
	}

 不知我的理解是否正确? 

 

 

5. assert()使用

:个人感觉就是,为了测试含有返回值的方法, 见 4

 

6.

TestCase: abstract 类 ,实现了 junit.framework.Test接口,  junit.framework.TestCase

TestSuite: 类, 实现Test接口.

Test: 接口, org.junit.Test

@Test 注解:  org.junit.Test  注解类型:  public abstract @interface org.junit.Test extends java.lang.annotation.Annotation {..}

7.jnuit bug

测试时, 什么异常都不报.

 

8 问题总结:

 ? ? ?

junit的使用 有@Test 和 继承TestCase 两种办法. @Test是Junit的 新的特性 ,使用容易 . 而继承TestCase方法是以前使用方法? 

 

 

 

  • 大小: 6.2 KB
   发表时间:2011-03-07  
1.assert的使用是来检验你代码最后运行的结果是否和你想象的一致,也就是正常来说,你在你的单元测试里都要用assert来判断是否正常,而不能看运行一下,看是绿了就通过了,这只能保证你写的程序在运行时没有报异常,而我们校验一个方法的时候往往都是有预期值的.
比如你执行了一个dao的insert(User user)方法,之后,你可以通过
assertNotNull(message,user.getId())来判断是否正确的插入了
我一般习惯喜欢assert中加message的方法,因为这样可以知道你具体错在哪里了
2.还有就是如果想只运行一个方法,可以直接在方法上右键,run as -- junit test
3.你说什么异常都报,可以看看控制台的信息,可能是你自己catch住了
0 请登录后投票
   发表时间:2011-03-07   最后修改:2011-03-07
4 . 有个东西叫mock 
7 . 不要加太多框架设计在junit中,spring框架常常把事务挂了....表现就是死活不完....
0 请登录后投票
   发表时间:2011-03-07  
finallygo 写道
1.assert的使用是来检验你代码最后运行的结果是否和你想象的一致,也就是正常来说,你在你的单元测试里都要用assert来判断是否正常,而不能看运行一下,看是绿了就通过了,这只能保证你写的程序在运行时没有报异常,而我们校验一个方法的时候往往都是有预期值的.
比如你执行了一个dao的insert(User user)方法,之后,你可以通过
assertNotNull(message,user.getId())来判断是否正确的插入了
我一般习惯喜欢assert中加message的方法,因为这样可以知道你具体错在哪里了
2.还有就是如果想只运行一个方法,可以直接在方法上右键,run as -- junit test
3.你说什么异常都报,可以看看控制台的信息,可能是你自己catch住了

谢谢,  我对asset有了认识了.
有个问题: 就是使用@Test 还是 继承TestCase 方法来进行,junit测试呢?
0 请登录后投票
   发表时间:2011-03-08  
3.x版本的是 用继承的方式,4.x版本的是用注解,用哪种都可以,个人比较喜欢3.x版本的
0 请登录后投票
   发表时间:2011-03-08  
JUnit4跟TestNG比起来,还是觉得TestNG更加方便灵活。
0 请登录后投票
   发表时间:2011-03-08   最后修改:2011-03-08
看来最近人品不错,学什么的时候就有人发什么样的帖子

http://licg1234.iteye.com/admin/blogs/946129
0 请登录后投票
   发表时间:2011-03-08  
单单的使用Junit 在很多情况下你会发现没法测试的,比如与上下文相关的。向楼上有位大侠所说的,看看mock这东西,之前我短暂使用JMock,不过发现几种情况下还是没法测试,因为代码写的不好的缘故吧,后来代码重构了,基本都能测试了,RMock,EasyMock也不错,推荐楼主看看
0 请登录后投票
   发表时间:2011-03-08  
finallygo 写道
3.x版本的是 用继承的方式,4.x版本的是用注解,用哪种都可以,个人比较喜欢3.x版本的

哦, 这我明白了 为什么老开发人员都是用testcse, 而我们新学的感觉注解@Test 更简单易用
0 请登录后投票
   发表时间:2011-03-08  
angie_hawk7 写道
单单的使用Junit 在很多情况下你会发现没法测试的,比如与上下文相关的。向楼上有位大侠所说的,看看mock这东西,之前我短暂使用JMock,不过发现几种情况下还是没法测试,因为代码写的不好的缘故吧,后来代码重构了,基本都能测试了,RMock,EasyMock也不错,推荐楼主看看


好的 谢谢 , 我有空会看看的. 经过大家的讨论 我明白了多
0 请登录后投票
论坛首页 Java企业应用版

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