Запустите тест JUnit Jupiter с помощью Spring 4.1 и JUnit4 Runner в IntelliJ - PullRequest
0 голосов
/ 11 января 2019

Следуя моей цели :

  • Для написания тестового примера Jupiter [Test case in Junit5] для кода Spring в версии 4.1.6.RELEASE.

Я решил сделать следующее [поскольку Junit5 поддерживает запуск тестов Jupiter на Junit4 runner]:

  • Напишите контрольный пример Юпитера [Контрольный пример в Junit5]
  • Запуск с помощью Junit4 Runner [в IntelliJ IDE]

Подробная информация о версии IDE и кода :

  • Spring Version: 4.1.6.RELEASE
  • Версия Java: 1.8 [Java 8]
  • IDE: IntelliJ Community 2018.3

Проблема, с которой я сталкиваюсь :

  • Когда я запускаю тестовый пример Юпитера в IntelliJ IDE: я вижу, что контрольный пример запускается junit5. [Трассировка IntelliJ показывает: "com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit5"] В результате в моем тестовом классе предполагаемый объект не получает автоматическую проводку / инъекцию.

Я добавил junit4 и junit5 в путь к классам из кода.

Может кто-нибудь подсказать, как настроить intellij, чтобы он принимал только бегун junit4 каждый раз, когда я запускаю тест.

Класс, который должен быть протестирован :

import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

@Repository
public class MyClassImpl implements IMyClass {

@PersistenceContext
private EntityManager entityManager;

@Override
public String getName(Long Id) {
    String queryString = "some query string";
    Query query = entityManager.createNativeQuery(queryString);
    List<String> resultList = query.getResultList();
    return resultList.isEmpty() ? null : resultList.get(0);
}

Код Unittest: TestClass для тестирования класса MyClassImpl .

import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;

@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {EnvironmentConfig.class, DataConfig.class, WebConfig.class})
@ActiveProfiles("dev")
class MyClassImplTest {

    @Autowired
    private IMyClass myClassObj;

     @Test
    void getAssessmentNameTestIT() 
    {
        if (myClassObj == null)
            System.out.println(" ************ I am NULL ************");
        else {
            System.out.println(" ************ I am NOT NULL ************");
            myClassObj.getName(21L);
        }
    }
}

Примечание : тот же тест, если я пишу, используя только Junit 4 [без использования библиотек junit5], предполагаемый объект вводится.

Зависимости Maven :

  • junit-jupiter-api РЕЛИЗ
  • ВЫПУСК ЮПИТА-ДВИГАТЕЛЯ
  • junit-платформа-бегун 1.2.0
  • джунит 4.10 [тест]

Плагин Maven:

<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M3</version>
<dependencies>
    <dependency>
        <groupId>org.junit.platform</groupId>
        <artifactId>junit-platform-surefire-provider</artifactId>
        <version>1.3.2</version>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>RELEASE</version>
    </dependency>
</dependencies>

Заранее спасибо

1 Ответ

0 голосов
/ 13 января 2019

@RunWith(SpringJUnit4ClassRunner.class) работает только с JUnit 4, следовательно, "JUnit4" в имени класса.

Таким образом, вы не можете использовать аннотации из JUnit 5 (JUnit Jupiter) - например, org.junit.jupiter.api.Test - если вы используете JUnit 4 Runner. Это никогда не сработает.

Чтобы использовать поддержку тестирования Spring с JUnit Jupiter, вы должны использовать SpringExtension вместо SpringJUnit4ClassRunner или SpringRunner - например: @ExtendWith(SpringExtension.class).

SpringExtension официально поддерживается как часть spring-test артефакта начиная с Spring Framework 5.0: https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#testcontext-junit-jupiter-extension

Обратите внимание, что можно использовать исходную версию SpringExtension с Spring Framework 4.3.x, если вы используете ее из моего репозитория GitHub: https://github.com/sbrannen/spring-test-junit5

В вашем случае будет невозможно использовать поддержку тестирования Spring с JUnit 5, если вы все еще используете Spring Framework 4.1.6.RELEASE. Вам нужно будет обновить хотя бы Spring Framework 4.3.x или, предпочтительно, Spring Framework 5.1.x.

С уважением,

Сэм ( автор Spring TestContext Framework )

...