美文网首页
日常排BUG1 - Java测试junit之@Test+@Bef

日常排BUG1 - Java测试junit之@Test+@Bef

作者: 阿敏MIN | 来源:发表于2018-11-23 22:16 被阅读5次

场景:hibernate建立(@Before)关闭(@After)session的时候
BUG: java.lang.NullPointException
排BUG心得:@Before+@After,只在@Test对应方法中前后执行,而对在@Test对应方法中的其他方法无效

案例1-执行成功,在select()方法中可以打印出session

    Session session;
    Transaction tx;
    @Before
    public void initData() {
        session = HibernateSessionFactory.getSession();
        tx = session.beginTransaction();
    }
    @After
    public void afterTest() {
        tx.commit();
        HibernateSessionFactory.closeSession();
    }

    // 查询
    @Test
    public void select() {
        System.out.println("session:" + session);
        Dept dept1 = (Dept) session.get(Dept.class, 1);
        System.out.println(dept1);
    }

案例2-执行失败,在select()方法中无法打印出session

    Session session;
    Transaction tx;
    @Before
    public void initData() {
        session = HibernateSessionFactory.getSession();
        tx = session.beginTransaction();
    }

    @After
    public void afterTest() {
        tx.commit();
        HibernateSessionFactory.closeSession();
    }

    // 增加
    public void addDeptBySql(int dept_id, String dept_name) {
        System.out.println("session:" + session);     //打印出session:null
        String sql = "insert into dept(dept_id,dept_name)  values(:dept_id,:dept_name)";    //出现java.lang.NullPointException的语句
        Query q = session.createSQLQuery(sql);
        System.out.println(q.getQueryString());
        q.setInteger("dept_id", dept_id);
        q.setString("dept_name", dept_name);
        q.executeUpdate();
        session.close();
    }

    @Test
    public void addDeptBySqlTest(){
        new HibernateSQLOrHQL().addDeptBySql(4, "人事部");
        System.out.println("成功添加");
    }

案例2解决方案:将@Before方法去掉,将里面的内容放到代码块中

    Session session;
    Transaction tx;
     {        //修改部分
        session = HibernateSessionFactory.getSession();
        tx = session.beginTransaction();
    }

    @After
    public void afterTest() {
        tx.commit();
        HibernateSessionFactory.closeSession();
    }

    // 增加
    public void addDeptBySql(int dept_id, String dept_name) {
        System.out.println("session:" + session);     //打印出session
        String sql = "insert into dept(dept_id,dept_name)  values(:dept_id,:dept_name)";   
        Query q = session.createSQLQuery(sql);
        System.out.println(q.getQueryString());
        q.setInteger("dept_id", dept_id);
        q.setString("dept_name", dept_name);
        q.executeUpdate();
        session.close();
    }

    @Test
    public void addDeptBySqlTest(){
        new HibernateSQLOrHQL().addDeptBySql(4, "人事部");
        System.out.println("成功添加");
    }

相关文章

  • 日常排BUG1 - Java测试junit之@Test+@Bef

    场景:hibernate建立(@Before)和关闭(@After)session的时候BUG: java.lan...

  • Android Test Base--JUnit Framewo

    JUnit Intro Android基于JUnit Framework来书写测试代码。JUnit是基于Java语...

  • android单元测试

    android基本的测试框架 java测试框架 Junit、Mockito。这两款测试框架用的比较普及,Junit...

  • Instrumentation

    1、Instrumentation单元测试框架,基于Junit;Junit是java单元测试根本 2、想要进行自动...

  • IDEA下的JUnit4单元测试

    什么是 JUnit? JUnit 是一个 Java 编程语言的单元测试框架。JUnit 促进了“先测试后编码”的理...

  • Junit-Java白盒测试

    一、Junit简介 Junit是开源的Java单元测试框架。Junit是白盒测试,即程序员知道软件如何完成功能...

  • Android自动化测试之——总述

    Android自动化测试之——总述 JUnit 和 Instrumented JUnit Android测试是基...

  • 2018-05-13看博客笔记

    1.测试框架的利好和繁荣:Java单元测试框架之争 java 测试框架: junit、testng、Spock 后...

  • Junit初步

    JUnit是一个Java语言的单元测试框架 Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件...

  • JUnit测试框架梳理

    一、JUnit概述&配置 1、JUnit是什么? JUnit是一个Java 编程语言的开源测试框架,用于编写和运行...

网友评论

      本文标题:日常排BUG1 - Java测试junit之@Test+@Bef

      本文链接:https://www.haomeiwen.com/subject/vlvsqqtx.html