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

时间:2019-01-11 10:35:08

标签: intellij-idea junit junit5

以下是我的目标

  • 为版本4.1.6.RELEASE的Spring代码编写Jupiter测试用例[Junit5中的测试用例]。

我选择执行以下操作(因为Junit5支持在Junit4运行程序上运行Jupiter测试):

  • 编写Jupiter测试用例[Junit5中的测试用例]
  • 使用Junit4 Runner运行[在IntelliJ IDE中]

IDE和代码版本详细信息

  • 春季版:4.1.6.RELEASE
  • Java版本:1.8 [Java 8]
  • IDE:IntelliJ社区2018.3

我面临的问题

  • 当我在IntelliJ IDE中运行木星测试用例时: 我看到测试用例是由junit5运行的。 [IntelliJ跟踪显示:“ com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit5”] 结果,预期的对象没有自动连接/插入到我的测试类中。

我已将 junit4 junit5 都添加到了代码的类路径中。

有人可以建议我每次运行测试时如何将intellij配置为仅接受junit4Runner。

要测试的类

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

单元测试代码: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-jupiter-engine RELEASE
  • junit-platform-runner 1.2.0
  • junit 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 :(得分:0)

@RunWith(SpringJUnit4ClassRunner.class)仅适用于JUnit 4,因此类名中的“ JUnit4”。

因此,如果您正在使用JUnit 4 org.junit.jupiter.api.Test,则不能使用来自JUnit 5(JUnit Jupiter)的注释,例如Runner。那永远都行不通。

要在JUnit Jupiter中使用Spring的测试支持,必须使用SpringExtension而不是SpringJUnit4ClassRunnerSpringRunner,例如:@ExtendWith(SpringExtension.class)

SpringExtension构件以来,Spring Framework 5.0正式支持spring-testhttps://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#testcontext-junit-jupiter-extension

请注意,如果您从我的GitHub存储库中使用SpringExtension的原始版本,请使用Spring Framework 4.3.x:https://github.com/sbrannen/spring-test-junit5

如果您仍在使用Spring Framework 4.1.6.RELEASE,则无法在JUnit 5上使用Spring的测试支持。您将需要至少升级到Spring Framework 4.3.x,或者最好升级到Spring Framework 5.1.x。

此致

Sam(Spring TestContext Framework的作者