如何验证一个功能的多个输入?

时间:2019-05-25 00:01:27

标签: java oop design-patterns

我有一个“ 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);
            }

        }

    }
}

0 个答案:

没有答案