【问题标题】:Is it possible to write short if statements [closed]是否可以编写简短的 if 语句 [关闭]
【发布时间】:2022-07-20 22:54:42
【问题描述】:

这是我的 if 语句。我只想写短一点。因为我认为这些都是无效的。顺便说一下,每个 if 语句都是独立的。

String actual_createdDate = "^\\d{13}$";
String actual_modifiedDate = "^\\d{13}$";
...

for (int i = 0; i < count; i++) {

    if (js.getBoolean("[" + i + "].createdDate")) {
        String a = js.get("[" + i + "].createdDate").toString();
        Assert.assertTrue(a.matches(actual_createdDate));
    }
    if (js.getBoolean("[" + i + "].lastModifiedDate")) {
        String b = js.get("[" + i + "].lastModifiedDate").toString();
        Assert.assertTrue(b.matches(actual_modifiedDate));
    }
    if (js.getBoolean("[" + i + "].uuid")) {
        String c = js.get("[" + i + "].uuid").toString();
        Assert.assertTrue(c.matches(actual_uuid));
    }
    if (js.get("[" + i + "].coverPhoto") != null) {
        String d = response1.jsonPath().get("[" + i + "].coverPhoto.tempDownloadURL").toString();
        Assert.assertTrue(d.matches(actual_temp_url));
        System.out.println(js.get("[" + i + "].coverPhoto.tempDownloadURL").toString() + " is equalent to : " + actual_temp_url);
    }
    if (js.get("[" + i + "].coverPhoto.metadata['Thumbnail-Large']") != null) {
        String e = response1.jsonPath().get("[" + i + "].coverPhoto.metadata['Thumbnail-Large']").toString();
        Assert.assertTrue(e.matches(actual_metaData_url));
        System.out.println(js.get("[" + i + "].coverPhoto.metadata['Thumbnail-Large']").toString() + " is equalent to : " + actual_metaData_url);
    }

}

【问题讨论】:

  • 不管 ifs js.getBoolean("[" + i + "].createdDate") 看起来很糟糕。
  • 除了只使用一个通用字符串而不是定义 5 个不同的字符串之外,我看不清楚在哪里可以缩短它...
  • 没有理由重复构建"[" + i + "]",重复构建路径名;每件事只构建一次。
  • @luk2302 实际上我的回复有重复的数据。我只想检查所有数据的值。我使用正则表达式作为测试数据。例如,如果响应中不存在封面照片,我不想得到错误,这就是为什么使用 js.getBoolean("[" + i + "].createdDate")

标签: java if-statement rest-assured


【解决方案1】:

请允许我向您介绍在怪人圈子中称为“函数”的一流代码重用单元;)

for (int i = 0; i < count; i++) {
    assertEqual(js, i, "createdDate", actual_createdDate);
    assertEqual(js, i, "lastModifiedDate", actual_modifiedDate);
    assertEqual(js, i, "uuid", actual_uuid);
    assertEqual(js, i, "coverPhoto", actual_temp_url);
    assertEqual(js, i, "coverPhoto.metadata['Thumbnail-Large']", actual_metaData_url);
}
    
private void assertEqual(JS js /*idk the type*/, int i, String fieldName, String expectedValue) {
    String property = "[" + i + "]." + fieldName;
    if (js.getBoolean(property)) {
        String value = js.get(property).toString();
        Assert.assertTrue(value.matches(expectedValue));
    }
}

【讨论】:

  • (注意这不会按原样工作,因为它们不都是布尔值。)
  • @DaveNewton 哦,我没有能力编译它,所以我做了一些猜测。我没有注意到有些案例使用了get(...) != null,有些使用了getBoolean。我假设getBoolean 正在检查该属性的存在,因为lastModifiedDate 可能不是布尔值。这是一个约会。如果它是一个布尔值,那么 yikes...
猜你喜欢
  • 2014-08-19
  • 2014-10-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 2011-05-26
  • 2022-06-13
  • 1970-01-01
相关资源
最近更新 更多