• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    對DAO編寫單元測試

    發布: 2008-7-14 10:04 | 作者: 廖雪峰 | 來源: 網絡轉載 | 查看: 60次 | 進入軟件測試論壇討論

    領測軟件測試網

     public class HibernateUtil {

    private static final SessionFactory sessionFactory;

    static {

    try {

    sessionFactory = new AnnotationConfiguration()

    .configure()

    .buildSessionFactory();

    }

    catch(Exception e) {

    throw new ExceptionInInitializerError(e);

    }

    }
      public static Session getCurrentSession() {

    return sessionFactory.getCurrentSession();

    }

    }

      HibernateUtil還包含了一些輔助方法,如:

     public static Object query(Class clazz, Serializable id);

    public static void createEntity(Object entity);

    public static Object queryForObject(String hql, Object[] params);

    public static List queryForList(String hql, Object[] params);

      在此不再多述。
    實體類User使用JPA注解,代表一個用戶:

      @Entity

    @Table(name="T_USER")

    public class User {

    public static final String REGEX_USERNAME = "[a-z0-9][a-z0-9\\-]{1,18}[a-z0-9]";

    public static final String REGEX_PASSWORD = "[a-f0-9]{32}";

    public static final String REGEX_EMAIL = "([0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\\w]*[0-9a-zA-Z]\\.)+[a-zA-Z]{2,9})";
    private String username;     // 用戶名

    private String password;     // MD5口令

    private boolean admin;       // 是否是管理員

    private String email;        // 電子郵件

    private int emailValidation; // 電子郵件驗證碼

    private long createdDate;    // 創建時間

    private long lockDate;       // 鎖定時間
    public User() {}
    public User(String username, String password, boolean admin, long lastSignOnDate) {

    this.username = username;

    this.password = password;

    this.admin = admin;

    }
    @Id

    @Column(updatable=false, length=20)

    @Pattern(regex=REGEX_USERNAME)

    public String getUsername() { return username; }

    public void setUsername(String username) { this.username = username; }
    @Column(nullable=false, length=32)

    @Pattern(regex=REGEX_PASSWORD)

    public String getPassword() { return password; }

    public void setPassword(String password) { this.password = password; }
    @Column(nullable=false, length=50)

    @Pattern(regex=REGEX_EMAIL)

    public String getEmail() { return email; }

    public void setEmail(String email) { this.email = email; }
    @Column(nullable=false)

    public boolean getAdmin() { return admin; }

    public void setAdmin(boolean admin) { this.admin = admin; }
    @Column(nullable=false, updatable=false)

    public long getCreatedDate() { return createdDate; }

    public void setCreatedDate(long createdDate) { this.createdDate = createdDate; }
    @Column(nullable=false)

    public int getEmailValidation() { return emailValidation; }

    public void setEmailValidation(int emailValidation) { this.emailValidation = emailValidation; }
    @Column(nullable=false)

    public long getLockDate() { return lockDate; }

    public void setLockDate(long lockDate) { this.lockDate = lockDate; }
    @Transient

    public boolean getEmailValidated() { return emailValidation==0; }
    @Transient

    public boolean getLocked() {

    return !admin && lockDate>0 && lockDate>System.currentTimeMillis();

    }

    }

      實體類PasswordTicket代表一個重置口令的請求:

      @Entity

    @Table(name="T_PWDT")

    public class PasswordTicket {

    private String id;

    private User user;

    private String ticket;

    private long createdDate;
    @Id

    @Column(nullable=false, updatable=false, length=32)

    @GeneratedValue(generator="system-uuid")

    @GenericGenerator(name="system-uuid", strategy="uuid")

    public String getId() { return id; }

    protected void setId(String id) { this.id = id; }
    @ManyToOne

    @JoinColumn(nullable=false, updatable=false)

    public User getUser() { return user; }

    public void setUser(User user) { this.user = user; }
    @Column(nullable=false, updatable=false, length=32)

    public String getTicket() { return ticket; }

    public void setTicket(String ticket) { this.ticket = ticket; }
    @Column(nullable=false, updatable=false)

    public long getCreatedDate() { return createdDate; }

    public void setCreatedDate(long createdDate) { this.createdDate = createdDate; }

    }

      UserDao接口定義了對用戶的相關操作:

     public interface UserDao {

    User queryForSignOn(String username);

    User queryUser(String username);

    void createUser(User user);

    void updateUser(User user);

    boolean updateEmailValidation(String username, int ticket);

    String createPasswordTicket(User user);

    boolean updatePassword(String username, String oldPassword, String newPassword);

    boolean queryResetPassword(User user, String ticket);

    boolean updateResetPassword(User user, String ticket, String password);

    void updateLock(User user, long lockTime);

    void updateUnlock(User user);

    }

      UserDaoImpl是其實現類:

     public class UserDaoImpl implements UserDao {

    public User queryForSignOn(String username) {

    User user = queryUser(username);

    if(user.getLocked())

    throw new LockException(user.getLockDate());

    return user;

    }
     public User queryUser(String username) {

    return (User) HibernateUtil.query(User.class, username);

    }
     public void createUser(User user) {

    user.setEmailValidation((int)(Math.random() * 1000000) + 0xf);

    HibernateUtil.createEntity(user);

    }

    // 其余方法略

    ...

    }

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    42/4<1234>

    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>