SpringBoot整合Junit

创建项目

idea创建空项目Empty Project。项目中创建模块,选择SpringBoot Initialize快速构建SpringBoot项目。
SpringBoot整合Junit_第1张图片
依赖这里什么也不用选择。
SpringBoot整合Junit_第2张图片
SpringBoot整合Junit_第3张图片
pom文件中默认有两个依赖:

  • spring-boot-starter springboot如果不导入任何依赖,默认的一个基础依赖。
  • spring-boot-starter-test springboot使用junit的测试依赖,默认也是导入的。
    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starterartifactId>
        dependency>

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        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组件。
SpringBoot整合Junit_第4张图片

@SpringBootTest
class Springboot02JunitApplicationTests {

    @Autowired
    private UserDao userDao;

    @Test
    void contextLoads() {
        userDao.save();
    }
}
测试输出:
save success

补充

如果我们将测试类更换个位置,会测试失败,像下面这样。
SpringBoot整合Junit_第5张图片
在运行测试程序,程序报错:

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();
    }
}

你可能感兴趣的:(SpringBoot,springboot)