Превратить тестовый класс статическим методом в сервис Spring Boot? - PullRequest
0 голосов
/ 08 октября 2019

Я использую Drools в качестве валидаторов для моего Механизма валидации в системе обмена сообщениями.

Я хочу преобразовать часть моего локального приложения консоли тестирования в службу. Использовал Springboot + Thymleaf все в порядке с другими классами, но я хотел бы проверить некоторые сообщения от открытой службы.

Проблема в том, что я использую суперкласс (DroolsTest), который я наследую в моих тестовых классах.

Превращение этого в контроллер, похоже, не работает.

Я получаю исключения Nullpointer для части конструктора.

   super("myParameter",RULE_FILES);

Как я могу преобразовать это в контроллер.? Это может быть очень просто, но я в замешательстве.

Спасибо, Advance Guys.

Этот фрагмент работает локально.

public class messageToTest_Test **extends DroolsTest** {

    public static String[] RULE_FILES;

    static {
        RefDataXmlPath ref = new RefDataXmlPath();
        ref.updateXmlPathbaseOnPhase(Phase.myParameter, Iteration.myParameter);

        GetInformationFromXmlMapping getRulesFromXmlMapping = new GetInformationFromXmlMapping();
        String rules[] = getRulesFromXmlMapping.getRulesByMessages(Iteration.myParameter, Phase.myParameter, "messageToTest").toArray(new String[0]);
        RULE_FILES = rules;
    }

    public messageToTest_Test() throws IOException {
        super("myParameter",RULE_FILES);


    }

    @Test
    public void messageToTest_Test_1() throws Exception {
      SOME CODE HERE.....
        }
    }

Конструктор в классе DroolsTest

public DroolsTest( String iteration, String... ruleFiles) {
  this.RULES_PATH = "Rules/" + iteration + "/";
  this.ruleFiles = ruleFiles;
  this.MESSAGES_PATH = "src/test/resources/XML_Messages/" + iteration + "/";
}

1 Ответ

0 голосов
/ 09 октября 2019

Я получаю исключения Nullpointer для части конструктора.

Вы можете вызывать конструкторы унаследованных классов только в конструкторах текущего. super("myParameter",RULE_FILES) инициализирует класс, но в методе он работает не так, поскольку сам метод может вызываться только тогда, когда класс уже инициализирован. (Я не понимаю, как ваша IDE не пометила это как недопустимый синтаксис.)

Если вам нужно настроить некоторые свойства до начала ваших тестов, и у вас есть доступ к этим полям, используйте @Before, @BeforeTest @BeforeAll и т. Д.

public class MessageToTest_Test **extends DroolsTest** {

  public static String[] RULE_FILES;

  @BeforeClass
  public static void beforeClass() {
      RefDataXmlPath ref = new RefDataXmlPath();
      ref.updateXmlPathbaseOnPhase(Phase.myParameter, Iteration.myParameter);

      GetInformationFromXmlMapping getRulesFromXmlMapping = new GetInformationFromXmlMapping();
      String rules[] = getRulesFromXmlMapping.getRulesByMessages(Iteration.myParameter, Phase.myParameter, "messageToTest").toArray(new String[0]);
      super.ruleFiles = rules;
      ...
  }

  @Before
  public void beforeEachTest () {
     /*.. other things ..*/
  }

  public messageToTest_Test() throws IOException {
      /*... test ...*/

  }
}

Если у вас нет доступа, используйте для настройки конструктор по умолчанию:

public class MessageToTest_Test **extends DroolsTest** {

  public static String[] RULE_FILES;

  static {
      RefDataXmlPath ref = new RefDataXmlPath();
      ref.updateXmlPathbaseOnPhase(Phase.myParameter, Iteration.myParameter);

      GetInformationFromXmlMapping getRulesFromXmlMapping = new GetInformationFromXmlMapping();
      String rules[] = getRulesFromXmlMapping.getRulesByMessages(Iteration.myParameter, Phase.myParameter, "messageToTest").toArray(new String[0]);
      RULE_FILES = rules;
  }

   MessageToTest_Test () {
     super("myParameter",RULE_FILES);
   }
   ...
}

Как можноЯ превращаю это в Контроллер .?

Не совсем понимаю, что вы подразумеваете под этим. Если вы хотите отдельно протестировать настройки - извлеките их в отдельный класс и протестируйте как компонент, который вы можете передать в конструктор.

...