SpringJunit4Runner 没有找到测试
Posted
技术标签:
【中文标题】SpringJunit4Runner 没有找到测试【英文标题】:SpringJunit4Runner no tests found 【发布时间】:2021-01-12 04:18:30 【问题描述】:我已经使用 springboot 和 junit4 编写了一个框架,但是没有找到测试并出现以下错误。 控制台日志显示以下错误:
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.61 sec <<< FAILURE!
initializationError(com.mastercard.mastercom.microservices.tests.testbase.TestBase) Time elapsed: 0.016 sec <<< ERROR!
java.lang.Exception: No runnable methods
at org.junit.runners.BlockJUnit4ClassRunner.validateInstanceMethods(BlockJUnit4ClassRunner.java:191)
我的基类是
SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppConfig.class, loader = AnnotationConfigContextLoader.class, initializers =
ConfigFileApplicationContextInitializer.class )
public class TestBase
//code
POM 是
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.2.5.RELEASE</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-junit</artifactId>
<version>2.0.0.0</version>
<scope>test</scope>
</dependency>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<includes>
<include>**/*Test*.java</include>
</includes>
</configuration>
</plugin>
没有找到 Junit 测试(Junit4)
【问题讨论】:
我也没有找到测试。 【参考方案1】:两个问题中的一个(或两个)。
1.) 你需要有一个带有@Test 注解的方法。也许你有,但这里没有显示。
2.) 对于 JUnit 4,您需要老式测试引擎,但您已将其排除在外。
【讨论】:
我从 spring 中删除了老式排除。我的测试在另一个扩展 TestBase 类的类中仍然得到 No Test Foudn 错误。我试图将一个@Test 添加到 testbase 并且它识别出 Test 但不是从其他类测试 JUnit4 和 JUnit5 有不同的@Test,由包区分。可能你只需要使用另一个“@Test”。【参考方案2】:在spring boot junit test中,出现“java.lang.Exception: No runnable methods”错误是因为junit框架在测试类中没有找到任何带有@Test注解的测试方法。
在较早版本的 junit 框架中,测试方法使用方法签名进行标识。 junit 标识以单词“test”开头的方法。它运行测试类中所有以“test”开头的方法,对源代码进行单元测试。
在最近版本的 junit 框架中,测试方法由注解@Test 标识。 junit标识测试类中所有带有@Test注解的方法,对源代码进行单元测试。
如何重现此问题
在spring boot应用程序中,在测试环境中,用不带@Test注解的测试方法创建一个测试类。 junit 框架使用 @Test 注解搜索方法。由于测试类不包含带有@Test注解的方法,所以会抛出这个错误“java.lang.Exception: No runnable methods”。
例子
@RunWith(SpringRunner.class)
@SpringBootTest
public class StudentTestController
@Autowired
private WebApplicationContext webApplicationContext;
private MockMvc mockMvc;
@Before
public void setup()
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
@Test
public void testStudent() throws Exception
mockMvc.perform(get("/student")).andExpect(status().isOk())
.andExpect(content().contentType("application/json"))
.andExpect(jsonPath("$.studentId").value("1"))
.andExpect(jsonPath("$.name").value("student1"))
.andExpect(jsonPath("$.age").value(30));
【讨论】:
我的测试在另一个类中以上是关于SpringJunit4Runner 没有找到测试的主要内容,如果未能解决你的问题,请参考以下文章
Gradle 没有找到我使用 Kotlin 和 JUnit 5 进行的测试