博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

springboot junit单元测试--2021/02/02

Posted on 2021-02-02 22:41  海绵谷  阅读(200)  评论(0编辑  收藏  举报

JUnit 是一个 Java 编程语言的单元测试框架。JUnit 在测试驱动的开发方面有很重要的发展,是起源于 JUnit 的一个统称为 xUnit 的单元测试框架之一。

  • 单元测试的好处
    启动后,自动化测试,并判断执行结果, 不需要人为的干预。
    只需要查看最后结果,就知道整个项目的方法接口是否通畅。
    每个单元测试用例相对独立,由Junit 启动,自动调用。不需要添加额外的调用语句。

  • 单元测试可能用到的注解

//引入运行环境
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SsmApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
//引入事物
@Transactional
@Rollback
//引入之前需呀启动的东西
@Before 
//方法上注解
@Test
//忽略测试
@Ignore
  • 单元测试需要引入的依赖
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <version>2.4.0</version>
            </dependency>
  • JUnit 中的重要的 API
  1. void assertEquals​(boolean expected, boolean actual) ​
    检查两个变量或者等式是否平衡
  2. void assertFalse​(boolean condition) ​
    检查条件是假的
  3. void assertNotNull​(Object object) ​
    检查对象不是空的
  4. Assert.assertThrows
    检查异常
  • 单元测试实例
/**
 * @desc 增加单元测试
 * @author ngLee
 * @date 2021/2/1 20:54
 */

@RunWith(SpringRunner.class)
@SpringBootTest(classes = SsmApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@MapperScan("com.example.ngssm.mapper")
@Transactional
public class AjaxControllerTest {
    private MockMvc mockMvc;
    @Autowired
    private WebApplicationContext webApplicationContext;
    @Before
    public void setup() {
        // 实例化方式二
	    mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
    }
    @Test
    public void testAssertEquals(){
        String a = "h";
        Assert.assertEquals("h",a);
    }
    @Test
    public void testAssertNotNull(){
        JSONObject jsonObject = new JSONObject();
        Assert.assertNotNull(jsonObject);
    }
    @Test
    public void testAssertNull(){
        JSONObject jsonObject = null;
        Assert.assertNull(jsonObject);
    }
    
    @Test
    public void testAssertTrue(){
        Assert.assertTrue("ass".startsWith("a"));
    }
    /**
     * @desc  异常1
     * @author ngLee
     * @date 2021/2/2 22:35
     */
    @Test
    public void testThrow(){
        Assert.assertThrows("/ by zero", ArithmeticException.class,()->{int a= 3/0;});
    }
    /**
     * @desc 异常2
     * @author ngLee
     * @date 2021/2/2 22:36
     */
    @Test
    public void testThrow2(){
        try {
            int a = 3/0;
        }catch (Exception e){
            Assert.assertEquals("/ by zero",e.getMessage());
        }
    }
    /**
     * @desc 模拟请求1
     * @author ngLee
     * @date 2021/2/2 22:37
     */
    @Test
    @Ignore
    public void testGetNewBlogList() throws Exception {
        MvcResult rs=mockMvc.perform(MockMvcRequestBuilders.get("/newblogList").characterEncoding("utf-8").param("selectNum","4")).andExpect(status().isOk()).andReturn();
        System.out.println(rs.getResponse().getContentAsString(Charset.forName("UTF-8")));
    }
    /**
     * @desc 模拟请求2
     * @author ngLee
     * @date 2021/2/2 22:37
     */
    @Test
    @Ignore
    public void testSelectOneContent() throws Exception {
        MvcResult rs = mockMvc.perform(MockMvcRequestBuilders.get("/content/{id}","3").characterEncoding("utf-8").param("id","2")).andDo(MockMvcResultHandlers.print()).andReturn();
        System.out.println("==="+rs.getResponse().getContentAsString(Charset.forName("UTF-8")));
    }
    @Test
    @Transactional
    @Rollback //不提交脏数据
    public void testSave(){
        //service.save(new Object());
    }
}