在可以实例化的类中编写示例数据是一个好主意吗?
在以下示例中,我使用了一些静态变量,用于通过以下方式直接访问某些联系人:
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 :(得分: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
来源中,而不是使用测试代码来规范您的域对象。
答案 1 :(得分:1)
这使得重新分解很难,并且根据类定义,这在此处无效。
正确的位置是创建另一个名为TestDataHelper
的类,并创建一个名为getContacts
的方法并返回Contact
个对象的列表。
关注点应始终分开。这就是Java的工作原理!