Siv*_*iva 2 junit intellij-idea junit5
以下是我的目标:
我选择执行以下操作[因为 Junit5 支持在 Junit4 runner 上运行 Jupiter 测试]:
IDE 和代码版本详情:
我面临的问题:
我已经从代码中将 junit4和junit5添加到类路径中。
有人可以建议如何配置intellij 以在每次运行测试时只使用junit4 runner。
要测试的类:
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);
}
Run Code Online (Sandbox Code Playgroud)
单元测试代码: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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意:如果我只使用 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>
Run Code Online (Sandbox Code Playgroud)
提前致谢
@RunWith(SpringJUnit4ClassRunner.class) 仅适用于 JUnit 4,因此类名中的“JUnit4”。
因此,您不能使用来自 JUnit 5 (JUnit Jupiter) 的注释——例如org.junit.jupiter.api.Test——如果您使用的是 JUnit 4 Runner。那永远行不通。
使用Spring的使用JUnit测试木星的支持,你必须使用SpringExtension的,而不是SpringJUnit4ClassRunner 或SpringRunner-这样的:@ExtendWith(SpringExtension.class)。
在SpringExtension官方支持的一部分spring-test:因为Spring框架5.0神器https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#testcontext-junit-jupiter-extension
请注意,SpringExtension如果您从我的 GitHub 存储库中使用 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 的作者)
| 归档时间: |
|
| 查看次数: |
1406 次 |
| 最近记录: |