Делегирование класса org.junit.jupiter.api.Assertions - PullRequest
0 голосов
/ 31 октября 2018

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

Итак, я бы хотел делегировать класс 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 виден только на уровне пакета.

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

1 Ответ

0 голосов
/ 01 ноября 2018

OK
В итоге я создал новый класс 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;
    }

}
...