У меня есть класс "Validator", который позволяет нам устанавливать значения переменных-членов (в основном, логических) - mv1, mv2, mv3 и т. Д. С помощью методов установки.Давайте назовем все эти переменные «настройками».Все методы установки возвращают этот валидатор вместо обычного void.Validator настраивается, а затем используется методами автоматического тестирования для проверки тела ответа json / string на вызов API, выполненный в методе test.
В Validator есть метод validate (Input input), который принимает «Input»msgstr "объект (на самом деле ответ API) и проверяет его на основании значений настроек Validator.Есть некоторые зависимости между различными настройками.Например, если mv1 = true, то mv3 не может быть истинным и т. Д. Кроме того, я не всегда могу использовать перечисления для ограничения значений параметров!
Я проверяю все параметры с помощью 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);
}
}
}
}