`
qdpurple
  • 浏览: 272934 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

junit4学习探讨

阅读更多

初学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
分享到:
评论
17 楼 shaka 2011-03-10  
抛出异常的爱 写道
shaka 写道
讨论下:
    如何在每个方法前初始化数据库数据,结束后销毁数据,不要告诉我在setUp里面插入数据,在tearDown里删除,需要系统的解决方案.

现阶段我们只好用 事务回滚 方式作数据库测试
还有几种方式但我个人认为不是非常的爽
比如测试用本机测试库
比如dbunit xml配置基础信息


数据这部分一直是单元测试的痛,我觉得rails框架那种天然集成单元测试的方式很舒服,在每个测试前后使用夹具来提交和回退测试数据,Java里面似乎就没类似的工具。
16 楼 Foxswily 2011-03-10  
抛出异常的爱 写道
shaka 写道
讨论下:
    如何在每个方法前初始化数据库数据,结束后销毁数据,不要告诉我在setUp里面插入数据,在tearDown里删除,需要系统的解决方案.

现阶段我们只好用 事务回滚 方式作数据库测试
还有几种方式但我个人认为不是非常的爽
比如测试用本机测试库
比如dbunit xml配置基础信息


简单封装dbunit,测试类只要提供测试数据xml,数据导出备份在封装的setup teardown搞定,处理好异常基本就够了,推荐基于testNG,junit的静态@BeforeClass太恶心
15 楼 抛出异常的爱 2011-03-09  
shaka 写道
讨论下:
    如何在每个方法前初始化数据库数据,结束后销毁数据,不要告诉我在setUp里面插入数据,在tearDown里删除,需要系统的解决方案.

现阶段我们只好用 事务回滚 方式作数据库测试
还有几种方式但我个人认为不是非常的爽
比如测试用本机测试库
比如dbunit xml配置基础信息
14 楼 shaka 2011-03-09  
讨论下:
    如何在每个方法前初始化数据库数据,结束后销毁数据,不要告诉我在setUp里面插入数据,在tearDown里删除,需要系统的解决方案.
13 楼 shaomeng95 2011-03-09  
最近我也写了个【junit的使用指南和作业规范】,望指教!
http://www.iteye.com/topic/947919
12 楼 ziliang871118 2011-03-09  
如果暂时不需要测试的方法,在方法名上加注解 @Ingore即可
11 楼 Foxswily 2011-03-08  
更喜欢testNG,junit太固执不化
10 楼 lzmhehe 2011-03-08  
有些东西使用写单元测试很好
有些东西东西写单元测试就是徒增烦恼

纸上得来终觉浅
9 楼 qdpurple 2011-03-08  
angie_hawk7 写道
单单的使用Junit 在很多情况下你会发现没法测试的,比如与上下文相关的。向楼上有位大侠所说的,看看mock这东西,之前我短暂使用JMock,不过发现几种情况下还是没法测试,因为代码写的不好的缘故吧,后来代码重构了,基本都能测试了,RMock,EasyMock也不错,推荐楼主看看


好的 谢谢 , 我有空会看看的. 经过大家的讨论 我明白了多
8 楼 qdpurple 2011-03-08  
finallygo 写道
3.x版本的是 用继承的方式,4.x版本的是用注解,用哪种都可以,个人比较喜欢3.x版本的

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

http://licg1234.iteye.com/admin/blogs/946129
5 楼 michaelyung 2011-03-08  
JUnit4跟TestNG比起来,还是觉得TestNG更加方便灵活。
4 楼 finallygo 2011-03-08  
3.x版本的是 用继承的方式,4.x版本的是用注解,用哪种都可以,个人比较喜欢3.x版本的
3 楼 qdpurple 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测试呢?
2 楼 抛出异常的爱 2011-03-07  
4 . 有个东西叫mock 
7 . 不要加太多框架设计在junit中,spring框架常常把事务挂了....表现就是死活不完....
1 楼 finallygo 2011-03-07  
1.assert的使用是来检验你代码最后运行的结果是否和你想象的一致,也就是正常来说,你在你的单元测试里都要用assert来判断是否正常,而不能看运行一下,看是绿了就通过了,这只能保证你写的程序在运行时没有报异常,而我们校验一个方法的时候往往都是有预期值的.
比如你执行了一个dao的insert(User user)方法,之后,你可以通过
assertNotNull(message,user.getId())来判断是否正确的插入了
我一般习惯喜欢assert中加message的方法,因为这样可以知道你具体错在哪里了
2.还有就是如果想只运行一个方法,可以直接在方法上右键,run as -- junit test
3.你说什么异常都报,可以看看控制台的信息,可能是你自己catch住了

相关推荐

    Junit In Action 学习笔记----下载不扣分,回帖加1分,童叟无欺,欢迎下载

    第5章:探讨了将Junit整合进开发环境的各种方式。并提及了用Ant,maven和Eclipse来自动化Junit测试。 第二部分:测试策略 第6章:描述了如何用stub来执行单元测试。这一章介绍了一个连接到web服务器的示例应用,并...

    BEA WebLogic Server8.1大全 源码

    本书是WebLogic开发人员的权威参考手册,书中深入探讨了WebLogic Server所提供的功能,并列举了一些最佳开发实践。本书全面介绍了WebLogic在J2EE应用程序的各个方面所完成的任务:从使用servlet、JSP和EJB,到管理...

    JDataStructures:Java中使用泛型的本地数据结构

    当泛型最终可用时,我涉足了一些个人项目,但没有深入探讨。 使用泛型重新访问常见的数据结构是一种有趣的审查和学习方法。 该项目以TDD样式完成,仅使用Ant构建工具即可完成。 鉴于此,要使用此库,您将需要熟悉...

    也谈自动化测试开发

    [题记]:今晚一个人跑到杭州窝在宾馆无所事事,也睡不着,就把这几天来关于自动化测试的探讨记录下来,也给自己一个机会,逼着自己好好反思这一年多来关于自动化测试的点滴。其实,我也只是接触过两套自动化框架,一...

    iuhyiuhkjh908u0980

     本文主要探讨如何利用Spring来装配组件,包括其事务上下文。从J2EE应用程序内部连接到单个的数据库并不是什么难事。但是,如果要装配或者集成企业级的组件,情况就复杂了。一个组件可以有一个或多个支持它的数据库...

Global site tag (gtag.js) - Google Analytics