# 单元测试

# 概述

HOS分别集成了JUnit和spring-boot-starter-test两个测试框架,分别用于基础测试(没有spring参与的,如普通工具类等)和基于springboot环境的单元测试,可以加快程序编写速度,同时提高编码的质量。

# 基础测试

不依赖spring的功能模块的单元测试 导入依赖

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <scope>test</scope>
</dependency>

创建测试类和测试方法

  • 测试类的的命名规则一般是 xxxTest.java ;
  • 测试类中测试的方法可以有test前缀;
  • 测试方法上加上注解 @Test。

public class HelloTest {

    @Before
    public void setUp() throws Exception {
    }

    @After
    public void tearDown() throws Exception {
    }

    @Test
    public void say() {
    }
}

注解介绍

  • @BeforeClass:针对所有测试,只执行一次,且必须为static void
  • @Before:初始化方法,执行当前测试类的每个测试方法前执行。
  • @Test:测试方法,在这里可以测试期望异常和超时时间
  • @After:释放资源,执行当前测试类的每个测试方法后执行
  • @AfterClass:针对所有测试,只执行一次,且必须为static void
  • @Ignore:忽略的测试方法(只在测试类的时候生效,单独执行该测试方法无效)
  • @RunWith:可以更改测试运行器 ,缺省值 org.junit.runner.Runner

执行顺序 一个单元测试类执行顺序为:

@BeforeClass –> @Before –> @Test –> @After –> @AfterClass

每一个测试方法的调用顺序为:

@Before –> @Test –> @After

# Spring Boot 中使用 JUnit

加入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

Spring Boot 测试

// 获取启动类,加载配置,确定装载 Spring 程序的装载方法,它回去寻找 主配置启动类(被 @SpringBootApplication 注解的)
@SpringBootTest(classes = HosApplication.class)
// 让 JUnit 运行 Spring 的测试环境, 获得 Spring 环境的上下文的支持
@RunWith(SpringRunner.class)
public class EmployeeServiceImplTest {

    @Autowired
    AccountService accountService;

    @Test
    public void testCache()  {
        String userTestName = accountService.getAccount("UserTestName", 2233);
        String userTestName2 = accountService.getAccount("UserTestName", 2233);
        assertEquals(userTestName,userTestName2);
    }
}

# 结果示例

img.png

成功示例

img_1.png

失败示例

img.png