以下是我的目标:
我选择执行以下操作(因为Junit5支持在Junit4运行程序上运行Jupiter测试):
IDE和代码版本详细信息:
我面临的问题:
我已将 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依赖项:
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>
预先感谢
答案 0 :(得分:0)
@RunWith(SpringJUnit4ClassRunner.class)
仅适用于JUnit 4,因此类名中的“ JUnit4”。
因此,如果您正在使用JUnit 4 org.junit.jupiter.api.Test
,则不能使用来自JUnit 5(JUnit Jupiter)的注释,例如Runner
。那永远都行不通。
要在JUnit Jupiter中使用Spring的测试支持,必须使用SpringExtension
而不是SpringJUnit4ClassRunner
或SpringRunner
,例如:@ExtendWith(SpringExtension.class)
。
自SpringExtension
构件以来,Spring Framework 5.0正式支持spring-test
:https://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的作者)