对dao类进行单元测试

时间:2013-08-23 07:38:11

标签: java unit-testing dao

好的,我需要一些帮助。我在DAO课程中有这个方法,我需要测试它:

public boolean saveOrUpdateUser(User user) {
    boolean res = false;
    try {
        this.getHibernateTemplate().saveOrUpdate(user);
        res = true;
    } catch (DataAccessException e) {
        res = false;
        this.logger.error("DataAccessException", e);
    }
    return res;
}

以下是我的测试方法:

   public void saveAndUpdateUserTest() {
              User user =new User ();
              user.setUserid(12);
              user.setFirstname("John");
              user.setLastname("Smith");

              assertEquals(12,user.getUser_id());
              assertEquals("John",user.getFirstname());
              assertEquals("Smith",user.getLastname());

       }

我需要在saveAndUPdateUserTest中以某种方式调用此方法,但我不知道要传递哪个参数!有人可以帮忙吗?

public boolean saveOrUpdateUser(User user){..}

用户用户意味着什么? 我有一个包含set和get方法的类user.java。

提前致谢。我还是初学者,我需要建议并帮助如何继续。

3 个答案:

答案 0 :(得分:2)

不是一个真正的答案,但无论你写什么测试,代码都是错误的。 Hibernate抛出的异常是不可恢复的,因此你不应该抓住它们并假装没有发生任何事情。代码应该是

public void saveOrUpdateUser(User user) {
    this.getHibernateTemplate().saveOrUpdate(user);
}

或者,如果你真的想要日志:

public void saveOrUpdateUser(User user) {
    try {
        this.getHibernateTemplate().saveOrUpdate(user);
    } 
    catch (DataAccessException e) {
        this.logger.error("DataAccessException", e);
        throw e;
    }
}

另一个注意事项:HibernateTemplatedocumented,因为“你不应该再使用这个课程了”。它甚至不再存在于Hibernate 4中。

我同意评论。如果您不了解对象和方法参数,请首先学习Java的基础知识。 Spring和Hibernate比基础知识要高很多,如果你不了解基本的Java /编程概念,你就会遇到困难。

答案 1 :(得分:0)

 public void saveAndUpdateUserTest() {

              //here is your variable of type User
              User user =new User ();
              user.setUserid(12);
              user.setFirstname("John");
              user.setLastname("Smith");

              assertEquals(12,user.getUser_id());
              assertEquals("John",user.getFirstname());
              assertEquals("Smith",user.getLastname());

              //you need to pass a variable with type User
              saveOrUpdateUser(user);

       }

this将是一个很好的起点。

答案 2 :(得分:0)

您永远不应该像在代码中那样捕获异常。回到你的问题,记住称为AAA的主要TDD模式 - 安排,行动,断言。

安排是您初始化SUT的地方(被测系统) 行动发生了(调用测试系统) 断言是你检查结果。

public void anyKindOfTest() {
   // arrange

   // act

   // assert
}

在你的情况下,

public void shouldStoreUser () {
  // arrange
  User user = new User ("John", "Smith");
  UserStorage userStorage = new UserStorage();

  // act
  userStorage.store(user);

  // assert
  assertNotNull(user.id);  
}
相关问题