【问题标题】:JUnit testing conversion from one class to anotherJUnit 测试从一个类到另一个类的转换
【发布时间】:2019-01-14 16:08:51
【问题描述】:

(已更新以添加有关课程的更多详细信息)

我是一名测试初学者,我正在寻找一种转换方法。

我正在尝试测试的方法将转换一种类型的对象,并返回另一种类型的对象,例如将 UserOne 对象转换为 UserTwo 对象,然后我想检查 UserTwo 对象的属性,以确保转换正确。

(更新)

我想做的是创建一个 NewUser 对象,将一个 TBUser 对象传递给原始的 convert 方法,然后测试从该方法返回的对象,以确保转换正确。

我的问题是在哪里创建然后传递对象。

class TBUserStringToNew***UserConverterTest extends groovy.util.GroovyTestCase {
void setUp() {
    super.setUp();
    TBUser tbUser = new TBUser();
    tbUser.setContactNumber1("0123456789");
}

void tearDown() {
}

@Test
void testConvert() {
    New***User nUser = testConvert(tbUser);
    Assert.assertEquals("0123456789", nUser.getContactNumber());
}

新用户类:

@JsonInclude(JsonInclude.Include.NON_NULL)
public class NewUser implements Serializable {

@JsonProperty("ID")
private Integer id = 0;

@JsonProperty("eID")
private Integer eId;

@JsonProperty("Forename")
private String forename;

@JsonProperty("Surname")
private String surname;

@JsonProperty("DateOfBirth")
private String dateOfBirth;

@JsonProperty("AddressLineOne")
private String addressLineOne;

@JsonProperty("AddressLineTwo")
private String addressLineTwo;

@JsonProperty("PostCode")
private String postCode;

@JsonProperty("PostCodeArea")
private String postCodeArea;

@JsonProperty("ContactNumber")
private  String contactNumber;

@JsonProperty("EmailAddress")
private String emailAddress;

@JsonProperty("ReferralSource")
private String referralSource;

@JsonProperty("ReferralDetails")
private String referralDetails;

public Integer getId() {
    return id;
}

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

public Integer getEId() {
    return eId;
}

public void setEId(Integer eId) {
    this.eId = eId;
}

public String getForename() {
    return forename;
}

public void setForename(String forename) {
    this.forename = forename;
}

public String getSurname() {
    return surname;
}

public void setSurname(String surname) {
    this.surname = surname;
}

public String getDateOfBirth() {
    return dateOfBirth;
}

public void setDateOfBirth(String dateOfBirth) {
    this.dateOfBirth = dateOfBirth;
}

public String getAddressLineOne() {
    return addressLineOne;
}

public void setAddressLineOne(String addressLineOne) {
    this.addressLineOne = addressLineOne;
}

public String getAddressLineTwo() {
    return addressLineTwo;
}

public void setAddressLineTwo(String addressLineTwo) {
    this.addressLineTwo = addressLineTwo;
}

public String getPostCode() {
    return postCode;
}

public void setPostCode(String postCode) {
    this.postCode = postCode;
}

public String getPostCodeArea() {
    return postCodeArea;
}

public void setPostCodeArea(String postCodeArea) {
    this.postCodeArea = postCodeArea;
}

public String getContactNumber() {
    return contactNumber;
}

public void setContactNumber(String contactNumber) {
    this.contactNumber = contactNumber;
}

public String getEmailAddress() {
    return emailAddress;
}

public void setEmailAddress(String emailAddress) {
    this.emailAddress = emailAddress;
}

public String getReferralSource() {
    return referralSource;
}

public void setReferralSource(String referralSource) {
    this.referralSource = referralSource;
}

public String getReferralDetails() {
    return referralDetails;
}

public void setReferralDetails(String referralDetails) {
    this.referralDetails = referralDetails;
}

TBUserStringToNewUserConverter 类:

public class TBUserStringToNewUserConverter implements Converter<String, NewUser> {

protected static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private SimpleDateFormat nSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

@Autowired
private ObjectMapper objectMapper;

@Autowired
private PlacesService placesService;

private NewUser convert(@NonNull TBUser tbUserIn) {

    ValidationErrors validationErrors = new ValidationErrors();

    String dob = null;

    try {
        dob = dayFormat.format(nlcSdf.parse(
                tbUserIn.getDob()
                .replace("T", " ")
                .replace("Z", "")));
    } catch (ParseException e) {
        ValidationError validationError = new ValidationError();
        validationError.setMessage(e.getLocalizedMessage());
        validationErrors.add(validationError);
    }

    NewUser nUser = new NewUser();
    nUser.setEId(tbUserIn.getId());
    nUser.setId(tbUserIn.getExternalId());
    nUser.setForename(tbUserIn.getFirstName());
    nUser.setSurname(tbUserIn.getSurname());
    nUser.setDateOfBirth(dob);
    nUser.setEmailAddress(tbUserIn.getEmail());
    nUser.setContactNumber(tbUserIn.getContactNumber1());

    TBAddress userAddress = tbUserIn.getAddress();

    String[] splitPostCode = userAddress.getPostzip().split("\\s+");
    nUser.setPostCodeArea(splitPostCode[0]);
    nUser.setPostCode(splitPostCode[1]);

    //standard source for all users
    nUser.setReferralSource("Healthy Living Centre");

    //placeholder referral details
    nUser.setReferralDetails("Referral Reasons: Weight Reduction, Mental Health, Respiratory, Other (Some other reason I entered). " +
            "\\r\\nMedical Conditions: Medical Conditions " +
            "\\r\\nMedications: Medications " +
            "\\r\\nReferral Source: Bob O Donnell\\r\\n(Doctor Medical) " +
            "\\r\\nRisks: May attempt something " +
            "\\r\\nOther Info: Other Relevant Info:");

    return nUser;
}

测试类

class TBUserStringToNewUserConverterTest extends groovy.util.GroovyTestCase {
void setUp() {
    super.setUp();
    TBUser tbUser = new TBUser();

}

void tearDown() {
}

@Test
void testConvert() {
    tbUser.setContactNumber1("");
    NewUser nUser = testConvert(tbUser);
    Assert.assertEquals("0123456789", nUser.getContactNumber());
}

【问题讨论】:

  • 源代码中的“***”字符是什么?
  • 有一些特定于业务的名称,并且将它们删除,我可以很容易地删除或更改它们
  • 请:再次阅读该链接minimal reproducible example。您不应该发布所有代码,只发布足以显示您的问题的完整代码。然后:您的代码仍然不合逻辑!您正在定义 TBUser tbUser = new TBUser(); within setUp() 方法。那么您的测试方法如何使用该变量? tbUser 是一种方法中的局部变量,那么您如何期望另一种方法使用它呢?说真的:如果你不了解局部变量和字段之间的区别,那么现在使用这样的框架和编写这样的代码完全会让你负担过重。
  • 感谢您的宝贵时间,我可能没有正确解释自己,甚至没有完全理解我的问题,不过我在当地得到了一点帮助,并解决了我的问题
  • 感谢您的快速回归!

标签: java testing intellij-idea junit


【解决方案1】:

乍一看,我认为您只是一步一步地走,例如:

您的setUp() 只设置了最基本的东西,即tbUser 对象:

void setUp() {
    super.setUp();
    TBUser tbUser = new TBUser();
}

然后,您对每个需要转换的属性进行一个测试。

@Test
void testConvert() {
    tbUser.setContactNumber1("0123456789");
    NewUser nUser = testConvert(tbUser);
    Assert.assertEquals("0123456789", nUser.getContactNumber());
}

就这么简单:一个需要转换的测试方法per属性。

当然,要使其工作,tbUser 必须是您的测试类的字段

class TBUserStringToNewUserConverterTest extends groovy.util.GroovyTestCase {

  private TbUser;

  void setUp() {
    tbUser = new TbUser();

...

但请注意:这看起来仍然很奇怪。至少在使用 JUnit 时,您需要在任何应该在每次测试之前执行的方法上使用 @Before 注释。我对那个 Groovy 基类还不够熟悉。所以我只是希望上面做的是正确的事情。

【讨论】:

  • 我无法访问 tbUser 对象,它是 getter/setter 方法,当它像这样设置时。它在 tbUser 对象上给了我一个“无法解析符号”警告
  • 然后提出一个完整的minimal reproducible example ...听起来真的很可疑。
  • 添加了更多代码,希望能提供更多信息
【解决方案2】:

只是为了完整起见:在获得更多帮助后,我需要公开 convert(TBUser) 方法,以便从 Test 类访问,并且需要创建转换器类的实例,并使用它来访问convert 方法,并传入 TBUser,并接收转换后的 NewUser:

public class TBUserStringToNewUserConverterTest {

TBUser tbUser;
TBAddress tbAddress;
TBUserStringToNewUserConverter converter;

@Before
public void setUp() throws Exception {

    converter = new TBUserStringToNewUserConverter();

    tbUser = new TBUser();
    tbUser.setId(42);
    tbUser.setFirstName("Brian");
    tbUser.setSurname("Blessed");
    tbUser.setDob("2018-10-22 15:43:35");
    tbUser.setEmail("blessed@testmail.com");
    tbUser.setContactNumber1("0123456789");

    tbAddress = new TBAddress();
    tbAddress.setAddressLine1("41 John street");
    tbAddress.setAddressLine2("Flat Road");
    tbAddress.setId("Jst");
    tbAddress.setPostzip("G47 0JJ");
    tbAddress.setTown("Derry");
    tbAddress.setCountryCCA3("IRE");

    tbUser.setAddress(tbAddress);
}

@After
public void tearDown() throws Exception {
}

@Test
public void testConvert(){
    NewUser n = converter.convert(tbUser);
    Assert.assertNotNull(n);
    Assert.assertEquals("HLC", n.getReferralSource());
    Assert.assertEquals("0JJ", n.getPostCode());
    Assert.assertEquals("BT47", n.getPostCodeArea());
}

【讨论】:

    猜你喜欢
    • 2011-01-30
    • 1970-01-01
    • 2020-09-19
    • 2015-01-27
    • 2022-07-08
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 2019-06-23
    相关资源
    最近更新 更多