最近需要进行功能测试,太久没有测试,导致运行测试方法时提示没有发现测试。
先看测试类
@SpringBootTest
@RunWith(SpringRunner.class)
public class Springboot_13_mall_startApplicationTests {
@Test
void contextLoads() {
}
}
自己写的测试类和测试方法代码如下(该代码有部分错误)
package com.itheima.util;
import com.itheima.Springboot_13_mall_startApplicationTests;
import com.itheima.until.RedisIDWorker;
import javax.annotation.Resource;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.junit.Test;
class RedisIDTest extends Springboot_13_mall_startApplicationTests {
@Resource
private RedisIDWorker redisIDWorker;
@Test
public void Test() throws InterruptedException {
ExecutorService es= Executors.newFixedThreadPool(100);
CountDownLatch lath=new CountDownLatch(5);
Runnable runnable= () -> {
for(int i=0;i<5;i++){
System.out.println(redisIDWorker.createId("订单id"));
}
lath.countDown();
};
long begin=System.currentTimeMillis();
for(int i=0;i<5;i++){
es.submit(runnable);
}
lath.await();
long end=System.currentTimeMillis();
System.out.println("使用的时间为="+(end-begin));
es.shutdown();
}
}
就会报错
查找了几篇文章才知道原因,是因为引错包了(原本是想引入JUnit5的),结果引入了JUnit4的包,使用Junit4的@Test注解,但是没有按照JUnit4的书写规范导致报错。
首先要先知道@Test来自哪个包,如在代码中@Test注解来自junit4的包。
然后junit4对于测试类有一些要求,就比如测试类需要public修饰,而原本的代码RedisTest没有public修饰,然后就报错提示没有发现测试,如下图
因此只要使用public修饰,就能正常运行,如下图添加public
运行结果如下
这样问题就解决了。
除外如果使用的是JUnit5,一般spring-boot-starter-test就包含了Junit5,当然这个也要看spring-boot-starter-test的版本,这里是2.7.2,如下图。
那么就不需要用public修饰测试类,如下图引入的是JUnit5的注解@Test,同时不用public修饰测试类
测试运行成功。