我有一个“ Validator”类,它使我们可以使用setter方法设置其成员变量(主要是布尔值)的值-mv1,mv2,mv3等。让我们将所有这些变量称为“设置”。所有的setter方法都返回此Validator而不是通常的void。设置一个Validator,然后由自动化测试方法用来验证该测试方法中进行的api调用的json / string响应主体。
验证器具有validate(Input input)方法,该方法接受一个“ Input”对象(实际上是一个api响应),并根据Validator的设置值对其进行验证。各种设置之间存在一些依赖关系。例如,如果mv1 = true,则mv3不能为true等。此外,我不能始终使用枚举来限制设置的值!
我使用validateSettings()验证所有设置。 validate(Input input)在进行验证之前将其调用。我想找出所有无效输入,一次全部显示它们,然后阻止验证直到输入被修复。 用Java做到这一点的最佳方法是什么?
我尝试了什么?
使用纯Java-
我使用了一个字符串来存储所有无效的设置,并说明为什么它们无效。然后,如果发现一个或多个设置无效,则抛出IllegalArgumentException并将其传递给字符串。如果可能,我想避免编写自定义代码。我也不想使用Java的assert,因为可以在运行时将其禁用。
使用TestNg库-
我使用SoftAssert验证成员变量。代码检查一些成员变量,断言变量具有有效值,最后执行softAssert.assertAll()一次列出所有错误值。但是,我想知道Java是否具有任何内置功能可以做到这一点。
class Validator {
// Validator settings
boolean mv1;
boolean mv2;
boolean mv3;
boolean mv4;
boolean mv5;
//MyEnum mv6;//...etc.
// Setters - One example.
public Validator setMv1(boolean mv1) {
this.mv1 = mv1;
return this;
}
// Validation logic
public void validate(Input input) {
validateSettings();
// Now, validate the input.
}
// Validate the settings of this Validator - using TestNg library
private void validateSettings() {
SoftAssert assertz = new SoftAssert();
// No need to validate all settings ! Only some needed.
if (mv1 == true) {
assertz.assertFalse(mv3, "Meaningful error message");
assertz.assertTrue(mv5, "Meaningful error message");
}
// Assert other things.
assertz.assertAll();
}
// Validate the settings of this Validator - using plain Java.
private void validateSettingsV1() {
String errors = "These are the invalid settings - ";
boolean areSettingsInvalid = false;
if (mv1 == true) {
if (mv3 == true) {
errors += "mv3 can't be true when...blah";
areSettingsInvalid = true;
}
if (mv5 == false) {
errors += "mv5 can't be false when...blah";
areSettingsInvalid = true;
}
// Repeat above logic for all invalid settings.
if (areSettingsInvalid == true) {
throw new IllegalArgumentException(errors);
}
}
}
}