以前都是用junit3.8的,前段时间改用junit4了,采用包为:Spring2.5.6+junit4.6(注意:必须添加spring-test.jar)
1. 编写测试基类,如下:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:/applicationContext.xml"})
@TransactionConfiguration(defaultRollback=true)
@Transactional
public class BaseTransactionTest{
}
其中:
@TransactionConfiguration(transactionManager="transactionManager",defaultRollback=true)
transactionManager的默认取值是“transactionManager”,defaultRollback的默认取值是true,当然,你也可以改成false。true表示测试不会对数据库造成污染,false的话当然就会改动到数据库中了。如果你的事务控制名字就是定义成transactionManager,并且确实需要在测试用例中不污染数据库的话,那么,上面这句话就可以直接写
@TransactionConfiguration
甚至直接省略掉。不过下面的这句
@Transactional
可不能省略。
2. 编写测试类,如下:
public class TestStudentDao extends BaseTransactionTest{
@Autowired
private StudentDao studentDao;
@Test
public void getStu(){
Student stu = new Student();
student.setName("张三");
studentDao.save(student);
}
}
执行以上测试用例,数据库中并不会增加这个叫张三的学生的纪录,也就是不会污染数据库了。但是,如果你的主键用的是自增长的话,那么,现在下次取主键的值已经在在原先的基础上+1了,所以说这个并不算是真正的不污染数据库。
但是如果我继承自这个基类的测试类里需要“污染数据库”呢?spring也考虑到了这点,所以你可以在方法名上添加@Rollback(false)表示这个测试用例不需要回滚。
注意:尽量避免事务嵌套。如果你要对某个拥有事务的方法进行测试的话,最好就不要再继承上面的这个基类,而是使用下面这个。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:/applicationContext.xml"})
public class BaseTest{
}
在Junit3.8版本中有个TestSuite,在junit4中需要进行多个测试的话代码如下:
@RunWith(Suite.class)
@Suite.SuiteClasses({
TestStudentDao.class,
TestTeacherDao.class
})
public class RunAllTestsSuite {
}
需要测试多个的,继续添加class吧
注意:如果junit的版本跟spring版本不对的情况下,会出现如下异常:
org/junit/Assume$AssumptionViolatedException; nested exception is
java.lang.NoClassDefFoundError:
org/junit/Assume$AssumptionViolatedException
具体原因跟解决方式请看:http://thorndike.iteye.com/blog/263197
不过该链接提供的解决方式有个缺点,就是测试数据会污染数据库,不论你defaultRollback=true还是false,所以如果你使用的Junit版本不是4.4的话,最好升级(或者降级)到4.4版本,因为spring2.5提供的spring-test使用的junit就是基于4.4版本的,而spring2.5系列已经不再更新了。。
分享到:
相关推荐
在Eclipse中使用JUnit4进行单元测试是一种常见的Java开发实践,它可以帮助开发者确保代码的正确性和稳定性。单元测试是软件开发中的重要环节,通过编写针对代码各个独立模块的测试用例,可以验证代码功能是否按预期...
JUnit单元测试的重要性 ------------------- 单元测试是java开发必备技能,它可以确保代码的正确性和可靠性。JUnit是一个流行的单元测试框架,它可以帮助开发者快速地编写和执行单元测试。 JUnit4的改进 ---------...
JUnit4是Java编程语言中最广泛使用的单元测试框架之一,它为开发者提供了一种方便、高效的方式来验证代码的正确性。这个压缩包文件包含了JUnit4的相关库,使得开发人员能够轻松地在他们的项目中引入单元测试功能。...
多数Java的开发环境都已经集成了JUnit作为单元测试的工具。 [1] JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为...
单元测试之道(Java):使用JUnit进行单元测试。单元测试是提高代码质量的有效手段,但大部分开发人员由于种种原因都不乐意进行单元测试。
本篇文章将深入探讨JUnit4的单元测试实例,帮助你更好地理解和应用这个工具。 一、JUnit4简介 JUnit4相较于之前的版本,引入了注解(Annotation)机制,极大地简化了测试用例的编写。例如,`@Test`注解用于标记测试...
【标题】"junit4 单元测试源码"涉及的是Java编程中单元测试的重要工具JUnit4的使用,这是对代码进行验证和调试的关键部分。JUnit4是JUnit框架的一个版本,它提供了更灵活的注解、测试套件管理和断言方式,使得编写...
junit3 junit4 api,单元测试的利器
【Junit单元测试完整案例】深入解析 在软件开发中,单元测试是验证代码功能是否正确、独立单元是否按预期工作的关键步骤。Junit作为Java领域最常用的单元测试框架,为开发者提供了简单易用的API来进行测试。本案例...
Junit4作为Java领域最常用的单元测试框架,为开发者提供了方便、高效的测试工具。本文将深入探讨如何使用Junit4对名为Calculate的类进行单元测试,包括其加减乘除四个方法。 首先,我们需要了解Junit4的基本结构和...
**如何使用JUnit4进行单元测试?** JUnit4引入了注解(Annotation)来简化测试编写,不再需要强制继承TestCase类。以下是一些关键的JUnit4注解: - `@Before`:类似于JUnit3的setUp方法,用于设置测试前的环境。 -...
JUnit4作为Java平台上最流行的单元测试框架,极大地简化了测试代码的编写和执行。本篇将深入探讨JUnit4的相关知识点,帮助你更好地掌握这个强大的工具。 1. JUnit4简介: JUnit4是由Ernst Kuhr和Kent Beck开发的...
这里提到的四个文件是Java开发中常用的单元测试框架和库,分别是JUnit、DBUnit、Unitils和Mockito。让我们逐一深入探讨它们的功能和使用方法。 **JUnit** 是Java领域中最广泛使用的单元测试框架,这里的`junit-4.11...
junit单元测试实验 JUnit是Java语言中一种流行的单元测试框架,它可以帮助开发者编写稳健、可靠的代码。本文将通过一个经典的案例,讲解如何使用JUnit结合Eclipse进行单元测试。 知识点1:什么是单元测试 单元...
JUnit是Java编程语言中最常用的单元测试框架之一,它允许开发者编写可重复运行的测试用例,以确保代码的正确性和稳定性。这篇文档将深入探讨JUnit的核心概念、使用方法以及其在实际开发中的重要性。 首先,我们要...
**Junit4单元测试详解** 单元测试是一种软件开发中的重要实践,它允许开发者对程序的各个独立组件进行验证,确保它们在孤立环境中按照预期工作。JUnit是Java编程语言中最广泛使用的单元测试框架,而Junit4是其一个...
在Java世界中,**JUnit**是最广泛使用的单元测试框架。本篇将重点介绍如何利用**JUnit 4.5**进行单元测试,以及这个版本的一些特性。 ### JUnit简介 JUnit是一个开源的、基于Java的测试框架,由Ernst Leiss和Kent ...