【问题标题】:Does it make sense to create tests like this? [closed]创建这样的测试有意义吗? [关闭]
【发布时间】:2018-07-30 12:23:13
【问题描述】:

最近我更深入地进行单元测试,但我有点卡住了。

示例。我们有这样的方法:

boolean isCheckOutChecked(NmCommandBean clientData) {
    return "checkOut".equalsIgnoreCase(clientData.getTextParameter("checkOut"));
}

大部分取决于clientData 返回的内容。有两种可能:

  1. 如果找不到文本参数返回null
  2. 如果有则返回字符串值


嗯......我已经创建了两个测试,但想知道这样的测试是否有任何意义?在这种情况下你会做什么?

@Test
void shouldReturnTrueWhenCheckoutIsChecked() {
    doReturn("checkOut").when(clientData).getTextParameter("checkOut");

    boolean checkOutChecked = formProcessor.isCheckOutChecked(clientData);
    assertTrue(checkOutChecked);
}

@Test
void shouldReturnFalseWhenCheckoutIsNotChecked() {
    doReturn(null).when(clientData).getTextParameter("checkOut");

    boolean checkOutChecked = formProcessor.isCheckOutChecked(clientData);
    assertFalse(checkOutChecked);
}

【问题讨论】:

  • 如果clientData 中的数据可以改变,那么这个测试是有意义的
  • 你应该在softwareengineering.stackexchange.com问这个问题
  • 郑重声明:你真的应该从不在生产代码中使用字符串literals开始,而是constants。甚至是 枚举 以获得编译时安全性。

标签: java unit-testing tdd ptc-windchill


【解决方案1】:

既然你已经硬编码checkOut 我会说是的,我们在我们的产品中有这种测试 - 称为“安全网”测试,以防有人在 UI 方面更改该参数,我们希望失败测试,而不是真实的代码。

【讨论】:

    【解决方案2】:

    在有条件/分支的地方,进行单元测试是非常有用的,让单元测试用例本身涵盖了所有的基本场景。这减少了反馈时间(无需部署应用程序来测试条件)并有助于加快开发速度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-02
      • 1970-01-01
      • 2021-09-05
      • 2018-07-03
      相关资源
      最近更新 更多