- 浏览: 1147428 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (411)
- Java Foundation (41)
- AI/机器学习/数据挖掘/模式识别/自然语言处理/信息检索 (2)
- 云计算/NoSQL/数据分析 (11)
- Linux (13)
- Open Source (12)
- J2EE (52)
- Data Structures (4)
- other (10)
- Dev Error (41)
- Ajax/JS/JSP/HTML5 (47)
- Oracle (68)
- FLEX (19)
- Tools (19)
- 设计模式 (4)
- Database (12)
- SQL Server (9)
- 例子程序 (4)
- mysql (2)
- Web Services (4)
- 面试 (8)
- 嵌入式/移动开发 (18)
- 软件工程/UML (15)
- C/C++ (7)
- 架构Architecture/分布式Distributed (1)
最新评论
-
a535114641:
LZ你好, 用了这个方法后子页面里的JS方法就全不能用了呀
页面局部刷新的两种方式:form+iframe 和 ajax -
di1984HIT:
学习了,真不错,做个记号啊
Machine Learning -
赵师傅临死前:
我一台老机器,myeclipse9 + FB3.5 可以正常使 ...
myeclipse 10 安装 flash builder 4.6 -
Wu_Jiang:
触发时间在将来的某个时间 但是第一次触发的时间超出了失效时间, ...
Based on configured schedule, the given trigger will never fire. -
cylove007:
找了好久,顶你
Editable Select 可编辑select
测试的分类:
http://stackoverflow.com/questions/520064/what-is-unit-test-integration-test-smoke-test-regression-test
http://stackoverflow.com/questions/4904096/whats-the-difference-between-unit-functional-acceptance-and-integration-test
http://stackoverflow.com/questions/3370334/difference-between-acceptance-test-and-functional-test
引用
Unit test
Integration test
Functional & Acceptance test
Regression test
and so on
Unit test and Integration test 的详细对比:
Integration test
Functional & Acceptance test
Regression test
and so on
http://zeroturnaround.com/rebellabs/the-correct-way-to-use-integration-tests-in-your-build-process/
Martin Fowle - Mocks Aren't Stubs:
http://martinfowler.com/articles/mocksArentStubs.html
Mock frameworks of Unit Test: Mockito JMockit EasyMock Jmock and so on.
junit3及之前,遵从“约定优于配置”的原则,单元测试类一般遵从以下原则:
引用
1 单元测试类继承 junit.framework.TestCase
2 单元测试类命名为 [被测试的类的类名]Test
3 测试方法(必须)命名为 test[业务逻辑模块],并且为 public void 的
4 failing开头的测试方法会被skipped/ignored
2 单元测试类命名为 [被测试的类的类名]Test
3 测试方法(必须)命名为 test[业务逻辑模块],并且为 public void 的
4 failing开头的测试方法会被skipped/ignored
junit4之后,引入的注解的方式。如果你使用的是4+的junit,请优先选择注解的方式,原因见:
http://stackoverflow.com/questions/2635839/junit-confusion-use-extend-testcase-or-test
引用
The @Test annotaton is more explicit and is easier to support in tools (for example it's easy to search for all tests this way)
Multiple methods can be annotated with @Before/@BeforeClass and @After/@AfterClass providing more flexibility
Integrated support for testing for expected exceptions using expected=
Support for the @Ignored annotation
比如,如果使用的是3的格式,则若单元测试类中没有任何test开头的测试方法的话,直接在单元测试类上run as - junit test 是会报下面错误的:Multiple methods can be annotated with @Before/@BeforeClass and @After/@AfterClass providing more flexibility
Integrated support for testing for expected exceptions using expected=
Support for the @Ignored annotation
junit.framework.AssertionFailedError: No tests found in com.xxx.MailComposeTest如果项目是基于maven的,这点尤其烦人,因为会发生 mvn test 失败的事情。如果是用 4 的话,在单元测试类上加一个 @Ignored ,就可以轻松的忽略掉该单元测试类,使之不会被mvn test所测试。
附:
How to skip a test case in Junit
http://junit.org/node/291
4的方式,单元测试类是不需要继承TestCase的,可以是普通的java类;加在测试方法上的@Test即是单元测试的入口;测试类上可以通过加@RunWith(如@RunWith(value=SpringJUnit4ClassRunner.class))来指定junit内置runner之外的其他runner。另外切记:请不要混合使用3的 extends TestCase 和4的 @Test,即不要这样做:测试类继承了TestCase,而其中的测试方法又添加了@Test注解。因为如果你这样做了的话,你会发现那些未遵循3的测试方法命名规范(形如testXxx)的方法,是无法被执行单元测试的,尽管它已经被添加了@Test注解!(遵循了3的测试方法命名规范的方法可以被执行单元测试,这说明,混合使用3的 extends TestCase 和4的 @Test最终用的是3的方式,4的方式变得不再起作用)。
另小注:4注解的@Ignore不存在与3的配置的冲突。
测试结果为Failures和Errors的单元测试都被认为是失败的单元测试,都是会造成maven项目build失败的。
测试方法中如果捕获到了Exception(并且未catch),则测试结果为Errors;有时你可能不希望某类异常造成Junit测试的失败,比如自定义的(继承了runtimeexception的)unchecked exception,则使用4的注解的方式,就可以轻松的将某类异常忽略掉,使其不至于导致单元测试的失败。具体有两种配置方式可供选择:
http://stackoverflow.com/questions/11426042/good-practice-for-testing-exceptions-in-junit
引用
@Rule public ExpectedException exception = ExpectedException.none(); @Test public void checkNullObject() throws CustomException { exception.expect(CustomException .class); MyClass myClass= null; MyCustomClass.get(null); }
@Test(expected=CustomException.class) public void checkNullObject() throws CustomException { MyClass myClass= null; MyCustomClass.get(null); }两种方式孰优孰劣参见链接出处
当Junit遇到System.exit():
单元测试的时候经常会碰到某个方法在某些分支会调用System.exit(exitcode)方法,而一旦程序运行到System.exit()方法,整个JVM就退出了,而junit也是运行于此JVM之上,即整个测试就(无任何返回结果地)终止了。
Junit+System.exit()会jvm退出、测试终止,但在eclipse(3.7 indigo)下,有个很奇怪的现象:"Stop Junit Test Run"按钮会一直保持在可点击状态,给人一种“单元测试并未终止只是被挂起无法继续执行下去”的错觉:
这应该是eclipse的bug:jvm退出,单元测试被强制终止,没有任何的单元测试结果被返回(success、errors、failures,etc),而"Stop Junit Test Run"按钮的状态是基于单元测试的返回结果的,无结果返回,无按钮状态变化。
解决办法:
http://stackoverflow.com/questions/309396/java-how-to-test-methods-that-call-system-exit
引用
其中的最佳答案给出的两个解决思路不错:
1 程序中不要使用System.exit(),而改为抛出一个unchecked exception,如抛出本博文上面部分说的一个自己定义的runtimeexception的子类:SomeAppException,并将测试方法声明为对SomeAppException是expected的。
2 在单元测试类中使用SecurityManager,来让单元测试方法可以检测到System.exit()调用,在jvm因其退出前可以做些额外的处理工作
1 程序中不要使用System.exit(),而改为抛出一个unchecked exception,如抛出本博文上面部分说的一个自己定义的runtimeexception的子类:SomeAppException,并将测试方法声明为对SomeAppException是expected的。
2 在单元测试类中使用SecurityManager,来让单元测试方法可以检测到System.exit()调用,在jvm因其退出前可以做些额外的处理工作
Junit与多线程:
Junit的测试主线程,在最后是通过执行System.exit(0)来退出的。System.exit是直接退出jvm,所以,如果测试运行期间你启动了其他线程(且未join入测试主线程),则这些线程就都因为jvm的退出而无法再执行下去。参考资料:
http://www.iteye.com/topic/154410
另外,junit测试主线程之外的其他线程抛出的Unckecked Exceptions,junit是捕获不到的。这里有个很经典的例子:
http://stackoverflow.com/questions/4039873/weird-problem-using-junit-in-multi-thread-environment
发表评论
-
Lucene & Solr
2013-05-07 17:30 2421Params of solr query (参见 solrj ... -
Continuous Integration Server:Jenkins & Hudson
2013-04-15 16:15 1464Jenkins: http://jenkins-ci.org/ ... -
Spring Integration
2013-03-26 16:52 3042Spring Integration Reference ... -
高可用与负载均衡:Haproxy(or lVS) + keepalived
2013-01-29 20:35 3184sources: Setting Up A High ... -
Spring Batch: 大数据量批量并行处理框架
2013-01-11 16:19 4840Spring Batch Documentati ... -
AOP: Aspect Oriented Programming
2013-01-06 11:13 2785The AspectJ Programming Gu ... -
Performance & Load test tool : JMeter
2012-12-18 14:28 1285Official: http://jmeter.apa ... -
rabbitmq & spring amqp
2012-12-04 00:09 8712My main AMQP post on blogger ... -
javaMail 邮件
2012-11-23 20:14 3495SMTP POP3的区别到底是什么? http://w ... -
未完 Spring MVC
2012-11-15 22:41 2119Annotations for Http pa ... -
Hibernate
2011-08-02 11:48 1179Hibernate缓存: 一级缓存的生命周期和session的 ... -
Maven Repository Management & Nexus
2011-07-30 11:39 1432Why do I need a Repositor ... -
XStream
2011-07-13 00:18 1380XStream 内置 Converters: http://x ... -
Hibernate注解: 联合主键:@IdClass vs @EmbeddedId
2011-07-12 21:01 15379Hibernate Annotations -> 2.2 ... -
Struts2 Tag 标签
2011-05-04 00:43 1639struts2 OGNL 中的#、%等符号的区别: Apach ... -
Spring
2011-04-07 19:10 2893Spring API & Reference: htt ... -
iBATIS cacheModel 缓存
2011-04-07 14:29 1351http://ibatis.apache.org/docs/d ... -
Template Engine: FreeMarker & Velocity
2011-01-16 22:56 4105FreeMarker http://freemar ... -
Struts2 标签 <s:url>中添加多个<s:param>的奇怪问题 待整理
2011-01-14 13:27 1916问题描述(我的回复): http://went3456.ite ... -
J2EE核心技术
2010-12-31 01:16 2655http://www.berheley.com/jsnl/J2 ...
相关推荐
【Junit单元测试完整案例】深入解析 在软件开发中,单元测试是验证代码功能是否正确、独立单元是否按预期工作的关键步骤。Junit作为Java领域最常用的单元测试框架,为开发者提供了简单易用的API来进行测试。本案例...
简单介绍了Junit的安装过程与实例应用。应用的问题是软件测试中的佣兵问题,整个文档中有代码及测试结果,可以更好地帮助学生了解Junit单元测试中的作用。
"JUnit单元测试在Java中的应用" 在Java中使用JUnit单元测试是软件开发过程中不可或缺的一部分。单元测试是指在开发过程中,对代码的一部分进行测试,以确保代码的正确性和可靠性。在Java中,JUnit是最流行的单元...
上下文时间软件测试中Junit单元测试实例在一种传统的结构化编程语言中,比如C,要进行测试的单元一般是函数或子过程。在象C++这样的面向对象的语言中,要进行测试的基本单元是类。对Ada语言来说,开发人员可以选择是...
### Junit单元测试内部机制深度解析 #### 一、自动化软件测试的重要性 随着软件工程的不断发展,软件的规模和复杂性急剧增加,软件测试成为确保软件质量和可靠性的关键环节。自动化测试,尤其是单元测试,因其高效...
### JUnit单元测试使用方法详解 #### 一、JUnit简介及意义 JUnit 是一个流行的 Java 编程语言的单元测试框架。它最初由 Erich Gamma 和 Kent Beck 创建,旨在简化软件开发过程中的测试工作。单元测试是软件开发...
junit3 junit4 api,单元测试的利器
这里提到的四个文件是Java开发中常用的单元测试框架和库,分别是JUnit、DBUnit、Unitils和Mockito。让我们逐一深入探讨它们的功能和使用方法。 **JUnit** 是Java领域中最广泛使用的单元测试框架,这里的`junit-4.11...
3 Junit单元测试框架的作用以及好处. 用来对类中的方法功能进行有目的的测试,以保证程序的正确性和稳定性。 能够让方法独立运行起来。 好处: 可以书写一系列的测试方法,对项目所有的接口或者方法进行单元测试。 ...
### JUnit单元测试原则与工具详解 #### 一、单元测试概述 单元测试(Unit Testing)是一种软件测试方法,主要用于验证程序中的最小可测试单元(通常是单个函数或方法)是否按预期工作。对于Java这样的面向对象语言来...
这篇博客主要探讨了如何使用JUnit进行Spring MVC Controller的单元测试。在实际开发中,单元测试可以帮助我们尽早发现潜在的问题,提高软件的可靠性和可维护性。 首先,让我们了解Spring MVC的基本概念。Spring MVC...
Junit单元测试是Java开发中的一个关键组成部分,它允许开发者对代码进行小规模的验证,确保各个函数或方法按照预期工作。在这个“junit单元测试示例”中,我们将深入探讨如何配置和执行一个基本的JUnit测试。 首先...
junit单元测试测试是测试部门的责任,我的责任应该关注在写代码上; 测试不是一种技术工作,毫无乐趣可言,请不要骚扰我。我可是一个了不起的SSH程序员 我们有测试人员,有集成/系统/确认测试,他们迟早会发现我的...
junit单元测试实验 JUnit是Java语言中一种流行的单元测试框架,它可以帮助开发者编写稳健、可靠的代码。本文将通过一个经典的案例,讲解如何使用JUnit结合Eclipse进行单元测试。 知识点1:什么是单元测试 单元...
Junit单元测试框架 Junit是Java语言中最流行的单元测试框架,可以帮助开发者编写和运行单元测试,以确保软件的正确性和可靠性。Junit提供了一个统一的测试框架,允许开发者使用Annotations来定义测试用例,实现自动...
下面我们将详细探讨JUnit单元测试和Ant自动构建脚本的相关知识点。 首先,让我们了解一下JUnit。JUnit是一个开源的测试框架,它基于xUnit架构,提供了一套简单的API来创建和运行测试用例。开发者可以通过注解(如@...