wiki:demo_01

Version 2 (modified by chenyang, 14 years ago) (diff)

--

单元测试应用示例——测试domain层对象

推广来源系统中,设计了一个对象cn.com.pcgames.gamehall2.domain.TmpAdRequest?,该对象是标准的java bean对象,该对象的作用是保存用户每次请求注册引导页的数所据信息,包括用户ip(ip),推广来源id(srcid),
游戏id(gameid),访问时间(createAt),请求referer(referer).

        private String ip;
        private long srcid;
        private Date createAt;
        private long gameid;
        
        private String referer;

        public String getReferer() {
                return referer;
        }
        
        public void setReferer(String referer) {
                this.referer = referer;
        }
        
        public String getIp() {
                return ip;
        }
        public void setIp(String ip) {
                this.ip = ip;
        }
        
        public long getSrcid() {
                return srcid;
        }
        public void setSrcid(long srcid) {
                this.srcid = srcid;
        }
        public Date getCreateAt() {
                return createAt;
        }
        public void setCreateAt(Date createAt) {
                this.createAt = createAt;
        }
        
        public long getGameid() {
                return gameid;
        }
        public void setGameid(long gameid) {
                this.gameid = gameid;
        }

后台统计时,需要区分每次请求,是不是重复的请求,所以重写了该类的equals(),hashCode()方法

   @Override
        public boolean equals(Object obj) {
                if(obj == null){
                        return false;
                }
                if(obj instanceof TmpAdRequest){
                        TmpAdRequest adRequest = (TmpAdRequest)obj;
                        EqualsBuilder equalsBuilder = new EqualsBuilder();
                        return equalsBuilder.append(this.ip, adRequest.getIp()).append(this.srcid, adRequest.getSrcid()).append(this.referer, adRequest.getReferer()).isEquals();
                        
                }else{
                        return false;
                }
        }
        @Override
        public int hashCode() {
                HashCodeBuilder builder = new HashCodeBuilder(17,37);
                return builder.append(this.srcid).append(this.ip).append(this.referer).toHashCode(); 
        }

如何验证我们的重写的equals的正确性呢?我们书写单元测试来验证

public class TmpAdRequestTest {
        
        @Test
        public void equals() throws Exception {
                
                TmpAdRequest ad_request1 = new TmpAdRequest();
                ad_request1.setIp("192.168.20.92");
                ad_request1.setSrcid(1L);
                ad_request1.setGameid(1);
                
                Date date = org.apache.commons.lang.time.DateUtils.parseDate("2011-12-12 23:23:23", new String[]{"yyyy-MM-dd HH:mm:ss"});
                ad_request1.setCreateAt(date);
                
                TmpAdRequest ad_request2 = new TmpAdRequest();
                ad_request2.setIp("192.168.20.92");
                ad_request2.setSrcid(1L);
                ad_request2.setGameid(1);
                ad_request2.setCreateAt(new Date());
                
                List<TmpAdRequest> list = new ArrayList<TmpAdRequest>();
                
                //ad_request1与ad_request2对象有相同的srcid,referer,ip,断言ad_request1.equals(ad_request2)
                Assert.assertTrue(ad_request1.equals(ad_request2));
                
                Assert.assertEquals(ad_request1, ad_request2);
                
                if(!list.contains(ad_request1)){
                        list.add(ad_request1);
                }
                
                if(!list.contains(ad_request2)){
                        list.add(ad_request2);
                }
                
               //将ad_request1与ad_request2加入同一个list以后,断言list.size() == 1
                Assert.assertTrue(list.size() == 1);
                
                
        }
}