Делегирование класса org.junit.jupiter.api.assertions

Я пишу фреймворк для автоматизации тестирования и стараюсь максимально упростить жизнь своим пользователям. Я хотел бы, чтобы мои пользователи просто утверждали, что это обычный тест Junit 5, и запись журнала (мой экземпляр Log4J), запись отчета (Extent Report) будет выполняться внутри assert.

Итак, я хотел бы делегировать класс org.junit.jupiter.api.Assertions, чтобы:

assertTrue(myCondition, "My Message");

Сделаю следующее (я скопировал оригинальный assertTrue и добавил свой функционал):

package org.junit.jupiter.api;

@API(status = STABLE, since = "5.0")
public class Assertions {

   //...... Some original org.junit.jupiter.api.Assertions functions 

   public static void assertTrue(boolean condition, String message) {
      try{
          AssertTrue.assertTrue(condition, message);
      } 
      catch(AssertionError error){
         //Do my things - reporter and logger
         throw error;
      }  
  }
  //...... Some original org.junit.jupiter.api.Assertions functions  
}

тем не мение

  1. org.junit.jupiter.api.Assertions - это длинный класс для делегирования.

  2. это усложняется, поскольку AssertTrue виден только на уровне пакета.

Хотелось бы свежих мыслей о том, как это элегантно решить .... Спасибо,

Вы изучили TestExecutionExceptionHandler? Может быть, вы можете написать для этого расширение. junit.org/junit5/docs/current/user-guide/…

Roland Weisleder 05.11.2018 08:41
0
1
95
1

Ответы 1

ОК,
В итоге я создал новый класс DelegatingAssert, и для каждого интересующего меня Assert я создал следующее:

public static void assertFalse(DelegatingExtentTest testCase, boolean condition, String message) {

    try{
        Assertions.assertFalse(condition);
        testCase.pass(message);

    }
    catch(AssertionError e) {
        testCase.fail("Did not: " + message);
        getLogger().error("Fail message: " + e.getMessage());
        getLogger().error("Fail stack trace: " + Helper.getStackTrace(e));
        throw e;
    }

}

Другие вопросы по теме