2014-09-25 52 views
2

在可以实例化的类中编写示例数据是一个好主意吗?班级中的示例数据 - 好的或不好的做法?

在下面的例子中,我使用一些静态无功的这是用来获得通过直接访问某些联系人:

Contact.contact101() 
... 

我使用的是测试中的这个例子中数据定义和不想编写一种包含所有示例数据的util类。

package com.example.webdriver.util.builder.model; 

import com.google.gson.annotations.SerializedName; 
import com.example.webdriver.util.builder.LocalStorageBuilder; 
import com.example.webdriver.util.builder.enumaration.UserStatus; 

public class Contact { 

    @SerializedName("ID") 
    private Long id; 
    @SerializedName("puid") 
    private Long principleUserId; 
    @SerializedName("cuid") 
    private Long contactUserId; 
    @SerializedName("v") 
    private int visible; 
    @SerializedName("ustat") 
    private String userStatus; 
    @SerializedName("ats") 
    private Long addedTimeStamp; 

    private static Contact contact101; 
    private static Contact contact102; 
    private static Contact contact305; 
    private static Contact contact302; 
    private static Contact contact301; 
    private static Contact contact382; 


    public Contact() { 
     this.id = LocalStorageBuilder.getContactIdCounter(); 
     this.principleUserId = LocalStorageBuilder.principalUserId; 
     this.contactUserId = 301L; 
     this.visible = 1; 
     this.userStatus = String.valueOf(UserStatus.ONLINE.getUserStatus()); 
     this.addedTimeStamp = 1410168552386L; 
    } 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public Long getPrincipleUserId() { 
     return principleUserId; 
    } 

    public void setPrincipleUserId(Long principleUserId) { 
     this.principleUserId = principleUserId; 
    } 

    public int getVisible() { 
     return visible; 
    } 

    public void setVisible(boolean visible) { 
     if (visible) { 
      this.visible = 1; 
     } else { 
      this.visible = 0; 
     } 
    } 

    public String getUserStatus() { 
     return userStatus; 
    } 

    public void setUserStatus(UserStatus userStatus) { 
     this.userStatus = String.valueOf(userStatus.getUserStatus()); 
    } 

    public Long getAddedTimeStamp() { 
     return addedTimeStamp; 
    } 

    public void setAddedTimeStamp(Long addedTimeStamp) { 
     this.addedTimeStamp = addedTimeStamp; 
    } 

    public Long getContactUserId() { 
     return contactUserId; 
    } 

    public void setContactUserId(Long contactUserId) { 
     this.contactUserId = contactUserId; 
    } 


    // Example data 

    public static Contact contact102() { 
     if (contact102 == null) { 
      contact102 = createContact(102L); 
     } 
     contact102.setPrincipleUserId(LocalStorageBuilder.principalUserId); 
     return contact102; 
    } 

    public static Contact contact302() { 
     if (contact302 == null) { 
      contact302 = createContact(302L); 
     } 
     contact302.setPrincipleUserId(LocalStorageBuilder.principalUserId); 
     return contact302; 
    } 

    public static Contact contact305() { 
     if (contact305 == null) { 
      contact305 = createContact(305L); 
     } 
     contact305.setPrincipleUserId(LocalStorageBuilder.principalUserId); 
     return contactAVG305; 
    } 


    private static Contact createContact(Long contactUserId) { 
     Contact contact = new Contact(); 
     contact.setContactUserId(contactUserId); 
     contact.setPrincipleUserId(LocalStorageBuilder.principalUserId); 
     contact.setUserStatus(UserStatus.ONLINE); 
     contact.setAddedTimeStamp(1410168552386L); 
     contact.setVisible(true); 
     return contact; 
    } 
} 
+0

不可以。将它分为专门用于测试的工厂。 – 2014-09-25 11:59:12

+1

害怕写更多的课程大多是错误的。更害怕为班级添加成员。 – SpaceTrucker 2014-09-25 12:00:20

回答

1

这使得重新考虑的难度和按类定义,这在这里是无效的。

正确的位置是创建另一个类名为TestDataHelper并创建一个名为getContacts的方法并返回列表Contact对象。

问题应该始终分开。这就是Java的工作原理!

2

不,请改用某种工厂。

互联网上有各种各样的术语,ObjectMother是一个,但我更喜欢TestDataFactory

public class TestDataFactory { 
    private static Contact createContact(Long contactUserId) { 
     Contact contact = new Contact(); 
     contact.setContactUserId(contactUserId); 
     contact.setPrincipleUserId(LocalStorageBuilder.principalUserId); 
     contact.setUserStatus(UserStatus.ONLINE); 
     contact.setAddedTimeStamp(1410168552386L); 
     contact.setVisible(true); 
     return contact; 
    } 
} 

的优点是,这可以住在你test来源,而不是与测试代码poluting你的域对象。

相关问题