запуск тестовых классов из другого пути в testng.xml файл

#java #maven #intellij-idea

#java #maven #intellij-idea

Вопрос:

Я довольно новичок в TestNG, Maven и IntelliJ. Я создал новый проект maven и определил класс ‘runtest’ в src / main / java. Я могу запускать тестовые наборы через testng.xml если я укажу тестовые классы в src /main / java.

Тем не менее, я хочу указать свои тестовые классы внутри src / test / java. Если я укажу какой-либо тестовый класс ‘test1.java ‘ в разделе src/test/ java и run он выдает ошибку: Ошибка: не удается найти класс в classpath: java/test1

Обходные пути, которые я уже пробовал:

  1. В testng.xml файл, содержащий полный путь к тестовому варианту — начиная с /Users/ (Примечание: я использую MAC)
  2. В testng.xml файл, содержащий полный путь к тестовому варианту — начиная с src/
  3. Указан дополнительный путь к классу в pom.xml в разделе maven-surefire-plugin (здесь также я указал полный путь, путь из базового каталога проекта и т.д.)
  4. Я попытался очистить кеш, однако никакой разницы

Другие наблюдения:

Intellij показывает мне ошибку, когда я указываю путь в testng.xml досье. Это дает мне возможность создать класс XXXX. Когда я нажимаю на создать класс — это дает мне 2 местоположения (src / main / java amp; src / test / java). У меня уже есть соответствующий тестовый класс в src / test / java. Почему он не принимает?

Я пытался проверить свой путь к классу на Mac, но у меня не было особого успеха.

Любая помощь будет оценена.

Спасибо

На основе комментариев, редактируя мои вопросы. Указываю детали моего кода.

Я хочу вызвать testng.xml файл из класса TestNG. Вот мой класс TestNG: runtests.java в src / main / java

публичный статический тестовый тестовый;

 public static void main(String[] args) {

    try {

        testng = new TestNG();
        testng.setPreserveOrder(true);
        testng.setVerbose(0);
        testng.setTestSuites(Arrays.asList("config/testng.xml"));
        testng.run();
        }
     catch (Exception e) {
        //Catch exception if any
        System.err.println("Error: "   e.getMessage());
    }

    }
  

Причина, по которой я хочу сделать это так, я хочу создать сборку maven и хочу указать testng.xml доступно для редактирования пользователем. Итак, если кто-то хочет запустить только 1 тестовый пример, он может редактировать testng.xml и запустите только 1 тестовый пример.

Вот мой testng.xml в config/testng.xml

имя набора = «Тестирование» подробное описание = «0»
имя теста = «Test1»

классы имя класса = «java / test1»
классы
тест

здесь, в имени класса, я не могу добавлять классы из другого местоположения. Я могу указать только классы, упомянутые в src / main / java. Я хочу указать классы, упомянутые в src / test / java.

Еще одна вещь, которую я хочу сделать: я хочу создать один конфигурационный файл, который будет поставляться со сборкой и будет доступен для редактирования. Итак, если пользователь хочет отредактировать конфигурацию (т. Е. Изменить имя сервера и т. Д.), Пользователь может редактировать файл конфигурации и запускать тестовые примеры.

Комментарии:

1. Пожалуйста, покажите ваш полный pom-файл?

Ответ №1:

Сначала вы должны найти свои модульные тесты, которые должны быть названы как *Test.java , Test*.java или TestCase*.java в соответствующую папку, которая находится в Maven src/test/java . Кроме того, вы никогда не должны определять полный путь в проекте Maven, не имеет значения, используете ли вы Mac / Linux / Windows Box или что-то еще.

Итак, в качестве примера макет папки выглядит следующим образом:

 .
├── pom.xml
└── src
    ├── main
    │   └── java
    │       └── com
    │           └── soebes
    │               └── training
    │                   └── maven
    │                       └── simple
    │                           └── BitMask.java
    └── test
        ├── java
        │   └── com
        │       └── soebes
        │           └── training
        │               └── maven
        │                   └── simple
        │                       └── BitMaskTest.java
        └── resources
            └── log4j.properties
  

Кроме того, вам не нужно определять дополнительный путь к классу в конфигурации maven-surefire-plugin, потому что, если вы разместите модульные тесты, как в приведенном выше примере, в правильном месте, он будет работать без какой-либо дополнительной конфигурации.

Если вы хотите использовать TestNG, вы можете просто поместить зависимость в свой pom-файл с помощью scope test следующим образом:

 <dependency>
  <groupId>org.testng</groupId>
  <artifactId>testng</artifactId>
  <version>6.8.8</version>
  <scope>test</scope>
</dependency>
  

Кроме того, вам не нужен какой-либо testng.xml файл или какой-либо другой файл конфигурации для запуска модульных тестов ни с помощью Maven, ни с помощью IntelliJ, ни с помощью Eclipse. Вы просто запускаете тесты, используя следующую командную строку (которую я рекомендую сначала протестировать, прежде чем переходить в вашу IDE):

 mvn clean package
  

Вам также не нужно настраивать maven-surefire-plugin, это будет работать из коробки.

Комментарии:

1. Спасибо. еще немного информации: