创建项目
idea创建空项目Empty Project。项目中创建模块,选择SpringBoot Initialize快速构建SpringBoot项目。
依赖这里什么也不用选择。
pom文件中默认有两个依赖:
- spring-boot-starter springboot如果不导入任何依赖,默认的一个基础依赖。
- spring-boot-starter-test springboot使用junit的测试依赖,默认也是导入的。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
使用Junit
idea使用SpringBoot Initialize创建项目时,自动导入了spring-boot-starter-test测试依赖,如果是手动创建的Maven项目,注意要手动添加上这个依赖。
创建Dao要测试的类
public interface UserDao {
public void save();
}
@Repository
public class UserDaoImpl implements UserDao {
@Override
public void save() {
System.out.println("save success");
}
}
打开测试类,在启动测试Dao组件。
@SpringBootTest
class Springboot02JunitApplicationTests {
@Autowired
private UserDao userDao;
@Test
void contextLoads() {
userDao.save();
}
}
测试输出:
save success
补充
如果我们将测试类更换个位置,会测试失败,像下面这样。
在运行测试程序,程序报错:
java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration,
you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test
错误原因
测试类启动时,会在
自己所在包和父包
中寻找带有@SpringBootConfiguration的启动类(@SpringBootConfiguration包含在@SpringBootApplication中),然后进行测试。我们将测试类转移位置后,测试类找不到SpringBoot的启动类,无法测试。
2种解决方法:
- 测试类上使用@SpringBootTest(classes=…)或者@ContextConfiguration (classes=…) ,指定测试类启动类在哪里。
@SpringBootTest(classes = Springboot02JunitApplication.class)
class Springboot02JunitApplicationTests {
@Autowired
private UserDao userDao;
@Test
void contextLoads() {
userDao.save();
}
}
或者
@SpringBootTest()
@ContextConfiguration(classes = Springboot02JunitApplication.class)
class Springboot02JunitApplicationTests {
@Autowired
private UserDao userDao;
@Test
void contextLoads() {
userDao.save();
}
}