Я хочу предоставить API потребителю API. Этот API может использоваться для выполнения определенных тестов легко. Я использую пользовательские утверждения AssertJ для создания этого API. В то время как потребитель API вызывает или использует мои пользовательские утверждения, я хотел бы, чтобы он легко настраивал использование мягких или жестких утверждений. Основываясь на этой конфигурации, внутренне я хотел бы сделать выбор между
Либо используя
Assertions.assertThat(...)
, либо используя
softlyAssertInstance.assertThat(...)
Я не хочу ставитьпроверить во всех местах, которые выглядят следующим образом:
if(softlyAssertInstance != null) {
softlyAssertInstance.assertThat(...);
} else {
Assertions.assertThat(...);
}
Скорее я бы предпочел что-то вроде следующего:
getAssertor().assertThat(...);
Таким образом, я могу выполнить свою проверку if-else в getAssertor следующим образом:
public ReturnType getAssertor() {//Don't know what my return type should be here
if(softlyAssertInstance != null)
return softlyAssertInstance;
else
return Assertions;
}
Я думал об этом, но возвращаемый тип Object не совсем помогает, так как я сужаю методы, которые можно вызывать для возвращаемого объекта. Например,
Object assertor = getAssertor();
assertor.assertThat();//this isn't possible unless I cast it down
Я бы хотел, чтобы это происходило динамически. Единственный способ видеть вперед - через Java Reflections, где я, вероятно, могу вернуть экземпляр Method. Это может выглядеть следующим образом:
public Method getAssertingMethod() {
if(softlyAssertInstance != null) {
return softlyAssertInstance.class.getDeclaredMethod("assertThat", {String.class});
else
return Assertions.class.getDeclaredMethod("assertThat", {String.class});
}
Мне все еще нужно было бы динамически определить, использовать ли здесь String.class или Boolean.class на основе вызывающего кода. Кажется, это интенсивный маршрут, который я считаю слишком сложным. Любые предложения, которые помогут мне лучше выполнить мои требования?