r如何让test不回退

r如何让test不回退,第1张

你好!如何让test不回退,在使用JUnit做单元测试时,为了使测试数据不对数据库造成污染,故选取了spring-test进行单元测试,但在进行dao层的测试时,发现save方法无法进行数据的自动回滚。

逐一进行检查分析,事务也开启了,并使用注解方式标记@RollBack(true),在控制台中也打出了事务回滚的信息,但仍然不能自动回滚。

后来感觉是数据库的原因,我的数据库使用的是MySql,这就存在数据表的类型是否支持事务情况。逐查阅MySql相关文档,发现,InnoDB类型的表是支持事务的,而MyISAM是不支持事务的,立刻查看数据表类型,果然为MyISAM,改为InnoDB后,重新进行测试,问题得到解决。

关于junit单元测试工具的安装请参看第二课的内容(其实就是导入一个junit的jar包就行了)

首先认识几个注解标签

@Test:测试方法

@Before:初始化方法

@After:释放资源

执行顺序:@Before->@Test->@After

第一步新建测试文件夹(目的就是用来存放测试类,使项目更整洁,分类明确,好管理)

选中项目右键new->Source Folder 输入文件夹的名称例如test

在测试文件夹下创建测试类(就是创建个普通的类)

如下在测试类中使用junit进行单元测试

下面只是先搭建一个测试框架

搭建好之后测试hibernate访问数据库的代码注意:导入的包不要弄错,都是hibernate的包

public class StudentTest { private SessionFactory sessionFactory private Session session private Transaction transaction @Before public void init(){ //创建配置对象 Configuration config = new Configuration() //创建服务注册对象 ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry() //创建会话工厂对象 sessionFactory = config.buildSessionFactory(serviceRegistry) //会话对象 session = sessionFactory.openSession() //开启事务 transaction = session.beginTransaction() } @Test public void testSaveStudents(){ Student s = new Student(1, "小明", new Date(), "北京xxxx街道5号楼201") session.save(s)//保存对象到数据库 } @After public void destory(){ transaction.commit()//提交事务 session.close()//关闭会话 sessionFactory.close()//关闭会话工厂 }}

进行测试如下: 选中测试方法右键run as ->junit test就行了

执行成功控制台打印信息:

查看数据库表

可以看到增加了一条信息,测试成功


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9621492.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存