【问题标题】:Inducing sane multiple assertions with integration tests通过集成测试诱导合理的多个断言
【发布时间】:2011-12-01 05:52:02
【问题描述】:

我遇到过很多关于在单元测试期间使用/不使用多个断言的资源。但是在编写 UI 级别的自动化集成测试时,我最终在一个测试中做了很多断言,这对我来说似乎不是一个坏主意,尤其是当我使用软断言时,这些断言仅在拆除过程中失败并在测试方法中报告所有断言失败,而不是将其限制为每次测试一份报告。

这样的场景之一是填写具有 10 个字段(文本框、下拉列表等)的表单。返回表单并验证所有输入的值是否可用。我不喜欢我的测试是,它充满了许多断言。我想断言所有这些值,但又希望我的测试看起来干净而不像 -

 public void testMethod() {
  // Some operation here
  softAssert("verification failed for field 1, expected value:" +value, isValuePresent(value));
  softAssert("verification failed for field 2, expected value:" +value, isValuePresent(value));
  softAssert("verification failed for field 3, expected value:" +value, isValuePresent(value));
  // Some more assertions here
}

我可以将这些断言提取到不同的方法中,但我觉得断言应该保留在测试方法中。以明确测试方法中正在测试的内容。

我只是有一种微不足道的虚无缥缈的感觉,这样的测试设计是合理的吗?或者 我可以在我的测试方法中进行设计改进。

【问题讨论】:

    标签: java unit-testing integration-testing


    【解决方案1】:

    您可以执行我所说的“示例断言”,这只是表单级别的断言。它看起来像这样:

    public void testMethod() {
      Form expected = new Form()
                        .field1('value1')
                        .field2('value2')
                        .field3('value3')
                        .field4('value4')
    
      Form result = someFormOperation();
    
      softAssert(expected, result);
    
    }
    

    【讨论】:

      【解决方案2】:

      我经常在某些结果上调用 toString() 并为正确的结果调用 assertEquals。如果您的底层对象实现了合理的 toString(或 toXML 等),那将简化测试代码。但它对未来的变化不太稳健。

      【讨论】:

      • 我认为实际上最好在未来的更改中中断,因此更有可能更新测试。
      猜你喜欢
      • 2016-07-25
      • 1970-01-01
      • 2022-11-18
      • 2021-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多