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 没有找到测试的主要内容,如果未能解决你的问题,请参考以下文章

流星测试:Mocha没有找到所有测试文件

找到了测试报告,但没有一个是新的。测试运行了吗?

没有找到给定的测试包括:JUNIT

Gradle 没有找到我使用 Kotlin 和 JUnit 5 进行的测试

Gradle 找不到集成测试、JUnit 5 和 Spring Boot:没有找到给定的测试包括:

所有测试都通过了,但竹子构建失败并显示“没有找到失败的测试,可能发生了编译错误”。