当前位置: 首页 > 知识库问答 >
问题:

在IntelliJ中使用Spring 4.1和JUnit4运行JUnit Jupiter测试

长孙景焕
2023-03-14

以下是我的目标:

  • 为版本4.1.6.release中的Spring代码编写Jupiter测试用例[Junit5中的测试用例]
  • 编写Jupiter测试用例[Junit5中的测试用例]
  • 使用Junit4运行程序[在IntelliJ IDE]运行

IDE和代码版本详细信息:

  • Spring版本:4.1.6.release
  • Java版本:1.8[Java 8]
  • IDE:IntelliJ Community 2018.3
  • 当我在IntelliJ IDE中运行jupiter测试用例时:我看到测试用例是由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
html" target="_blank">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代码:测试MyClassImpl类的TestClass。

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);
        }
    }
}

注意:同样的测试用例,如果我只使用JUnit4编写[没有使用任何junit5库],那么目标对象将被注入。

Maven依赖项:

  • JUnit-Jupiter-API发布
  • JUnit-Jupiter-引擎释放
  • JUnit-Platform-Runner 1.2.0
  • JUnit 4.10[测试]
<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个答案

景景胜
2023-03-14

@runwith(SpringJunit4ClassRunner.class)只适用于JUnit4,因此类名中有“junit4”。

因此,如果您使用的是JUnit 4运行器,则不能使用JUnit 5(JUnit Jupiter)中的注释--例如org.JUnit.Jupiter.api.test--。那绝对行不通。

要在JUnit Jupiter中使用Spring的测试支持,您必须使用SpringExtension而不是SpringJUnit4ClassRunnerSpringGrunner--像这样:@ExtendWith(SpringExtension.class)

从Spring Framework 5.0起,SpringExtension作为Spring-test工件的一部分得到正式支持:https://docs.Spring.io/Spring/docs/current/spring-framework-reference/testing.html#testcontext-junit-jupiter-extension

请注意,如果您从我的GitHub存储库https://GitHub.com/sbrannen/spring-test-junit5中使用springextension的原始版本,则可以将其与Spring Framework 4.3.x一起使用

在您的情况下,如果您仍然在使用Spring Framework 4.1.6.Release,就不可能在JUnit5中使用Spring的测试支持。您至少需要升级到Spring Framework 4.3.x或Spring Framework 5.1.x。

问候,

Sam(Spring TestContext框架的作者)

 类似资料:
  • 问题内容: 在JUnit4中可以吗? 在JUnit3中,我将执行以下操作: 问题答案: takari-cpsuite(最初由Johannes Link 开发)提供了一个适合您需求的classpath- suite。它允许通过正则表达式对Classpath中的类进行过滤,例如:

  • 我正在IntelliJ中用基本的JUnit5测试处理一个Kotlin项目,使用Maven管理依赖项。我已经通过IntelliJ命令成功地执行了JUnit测试。 今天早些时候,我尝试开始将测试分组到测试套件中,并在pom.xml中添加了junit-platform-runner和junit-platform-commons作为依赖项。从那以后,我每次尝试执行任何测试时都得到以下ClassNotFou

  • The JUnitPlatform runner is a JUnit 4 based Runner which enables you to run any test whose programming model is supported on the JUnit Platform in a JUnit 4 environment — for example, a JUnit Jupiter

  • 问题内容: 我有大量的测试,大约需要半小时才能运行,并且希望能够并行进行测试。 有没有办法用IntelliJ IDEA 9做到这一点? 问题答案: IDEA仅从版本10开始才了解并行JUnit测试。 有一个跟踪器问题,您可以投票并等待进度:http: //youtrack.jetbrains.net/issue/IDEA-47103 我们计划将其添加到IDEA 10中,但是优先级将取决于票数。