Java 利用集成测试归纳合理的多重断言

Java 利用集成测试归纳合理的多重断言,java,unit-testing,integration-testing,Java,Unit Testing,Integration Testing,我遇到过很多关于在单元测试期间使用/不使用多个断言的资源。但是,在编写UI级自动化集成测试时,我最终在一个测试中执行了许多断言,这对我来说并不是一个坏主意,特别是当我使用软断言时,软断言仅在测试方法中的拆卸和报告所有断言失败时失败,而不是将其限制为每个测试一个报告 其中一种情况是填写一个包含10个字段(文本框、下拉列表等)的表单。返回表单并验证所有输入的值是否可用。我不喜欢我的测试,因为它充满了很多断言。我想断言所有这些值,但又希望我的测试看起来干净,不像- public void testM

我遇到过很多关于在单元测试期间使用/不使用多个断言的资源。但是,在编写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
}
我可以将这些断言提取到不同的方法中,但是我觉得断言应该保留在测试方法中。明确测试方法中测试的内容

这仅仅是我的一种微不足道的无力感,而这样的测试设计是合理的吗?或 我可以在我的测试方法中进行设计增强。

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

public void testMethod() {
  Form expected = new Form()
                    .field1('value1')
                    .field2('value2')
                    .field3('value3')
                    .field4('value4')

  Form result = someFormOperation();

  softAssert(expected, result);

}
您可以执行我称之为“示例断言”的操作,这只是表单级别的断言。它看起来像这样:

public void testMethod() {
  Form expected = new Form()
                    .field1('value1')
                    .field2('value2')
                    .field3('value3')
                    .field4('value4')

  Form result = someFormOperation();

  softAssert(expected, result);

}

我经常对一些结果调用toString(),并对正确的结果进行assertEquals。如果您的底层对象实现了简化测试代码的合理toString(或toXML等)。但是它对将来的更改不太可靠。

我经常对一些结果调用toString(),并对正确的结果进行断言。如果您的底层对象实现了简化测试代码的合理toString(或toXML等)。但它对未来的变化不太可靠。

我认为实际上最好是在未来的变化中中断,这样测试就更有可能更新。我认为实际上最好是在未来的变化中中断,这样测试就更有可能更新。