【问题标题】:Expecting result in test with spring bean使用 spring bean 进行测试的预期结果
【发布时间】:2016-08-17 14:10:44
【问题描述】:

Tere are bean transactional bean witn method

public class Bean {
     @Transactional(propogation = REQUARED) // propogation set for read clarity 
     public save(User user);

     @Transactional(propogation = REQUARED)
     public List<User> getUsers(); // implementation - 
                                          // native query - select * users;
                                          // with User.class
}

测试类:

class Test {

     @Autovired
     private Bean bean;

     public void test () {
          User user = getNewUser();
          bean.save(user);
          Assert.assertTrue(bean.getUsers().size() = 1); //False because
           //transaction do not commit 
           //but try it read data by sql query 
           //(not from persistence context)    
     }
}

上面有注释@AfterTransaction 来解决上面的问题。

@AfterTransaction 
public void check() {
    Assert.assertTrue(bean.getUsers().size() = 1); //True
}

但如果有其他方法。因为@AfterTransaction 一个用于测试类,但我们可以有许多带有检查的测试方法

【问题讨论】:

    标签: java spring testing transactions


    【解决方案1】:

    在您的测试类中,从以下导入 import org.springframework.jdbc.core.JdbcTemplate; 创建一个 private JdbcTemplate select;

    这将允许您执行这样的断言:assertEquals(0, select.queryForInt("SELECT COUNT(*) from userTable where user_id=1"))

    这个解决方案可以解决你的问题:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多