您当前的位置:首页 > 计算机 > 编程开发 > Java

java搭建的spirngboot3基础框架

时间:10-24来源:作者:点击数:

首先声明一下。这个基础版本代码框架并没有进行连接数据库的操作,未来会发布其他版本连接数据库操作的基础框架

一个好的基础框架会让你写代码速度更快,规范性更好,让你的代码更稳定。

很多程序员在写代码的时候容易忽略一些基础功能的搭建,小弟不才分享一下自己搭建的一个spring boot3的基础框架

希望与大家一起互相学习,共同进步。

搭建一个基础框架首先加入的是日志打印系统。可以把日志分不同等级进行打印,还可以按天进行日志汇总

其次需要加入的是单元测试,单元测试分包括spring 组件扫描的单元测试,不包括spring 组件扫描的单元测试。

在需要spring组件扫描的单元测试时,又分为带事务控制的单元测试,与不带事务的单元测试。

日志打印这里我们选择的是log4j2

单元测试选择的是TestNG

服务层单元测试代码示例如下

package com.vsked.auth.service;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.testng.annotations.Test;
import com.vsked.test.BaseTestWithoutTransactional;
 
public class AccountServiceTest extends BaseTestWithoutTransactional {
     
    private static final Logger log = LoggerFactory.getLogger(AccountServiceTest.class);
     
    @Autowired
    AccountService accountService;
     
    @Test
    public void test1() throws Exception {
        if(log.isTraceEnabled()){
            log.trace("start");
        }
 
        String accountId=accountService.getAccountId();
        log.info("accountId is :{}" ,accountId );
 
        if(log.isTraceEnabled()){
            log.trace("end");
        }
    }
 
}

控制层单元测试如下

package com.vsked.auth.web;
 
import static org.hamcrest.Matchers.equalTo;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import java.io.File;
import java.io.FileInputStream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.RequestBuilder;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.testng.Assert;
import org.testng.annotations.Test;
import com.vsked.test.BaseTestWithoutTransactional;
 
@AutoConfigureMockMvc //自动配置mvc注解
public class TestControllerTest extends BaseTestWithoutTransactional {
 
    private static final Logger log = LoggerFactory.getLogger(TestControllerTest.class);
 
    @Autowired
    MockMvc mvc;
 
    @Test
    public void test1() throws Exception {
        log.info("TestControllerTest test1 start ");
        // 用来测试post,前端传值时直接传参数,后端封装成对象用@ModelAttribute
        RequestBuilder reqBuilder = post("/test")
                .param("username", "vskeda1username")
                .param("password", "mypassword is unknown");
        String respStr=mvc.perform(reqBuilder)
                .andExpect(status().isOk())
                .andDo(print())
                .andReturn()
                .getResponse()
                .getContentAsString();
 
        log.info("{}",respStr);
 
        Assert.assertEquals(respStr,"jinan37001");
        log.info("TestControllerTest test1 end ");
    }
 
    @Test
    public void test3() throws Exception {
        log.info("TestControllerTest test2 start ");
        // 用来测试get,前端在请求路径或问号后面传参数时,
        // 后端封装用@PathVariable("ida") String id 或 @RequestParam("username") String username
        RequestBuilder request = get("/test/9631").param("username", "vskeda1username").param("password",
                "mypassword is unknown");
        mvc.perform(request).andExpect(status().isOk())
                .andExpect(content().string(equalTo("9631testokvskeda1usernamemypassword is unknown")));
        log.info("TestControllerTest test2 end ");
    }
 
    @Test
    public void fileTest() throws Exception {
        log.info("TestControllerTest fileTest start ");
        ResultActions resultActions = mvc.perform(MockMvcRequestBuilders.multipart("/test/input")
                .file(new MockMultipartFile("inputFile", "newtest1.gif", "application/ms-excel",
                        new FileInputStream(new File("C:/Users/testdeveloper3/Desktop/测试图片/Stamp/aaa.gif"))))
                .file(new MockMultipartFile("inputFile", "newtest2.gif", "application/ms-excel",
                        new FileInputStream(new File("C:/Users/testdeveloper3/Desktop/测试图片/Stamp/bbb.gif"))))
                .param("inputText", "11111111").param("inputTextarea", "22222")
                );
        MvcResult mvcResult = resultActions.andDo(MockMvcResultHandlers.print()).andExpect(MockMvcResultMatchers.status().isOk()).andReturn();
        String result = mvcResult.getResponse().getContentAsString();
        log.info("==========结果为:==========\\n " + result + "\n" );
        log.info("TestControllerTest fileTest end ");
    }
     
}

当然控制层如果不想使用代码来进行单元测试,可以用Apifox,postman,postwoman等API测试工具来进行测试

以下是基础框架详细代码

log4j2testng7springboot3simple.zip
9f0488e43a80195c524d596f9173ccab.zip (20.29 KB)
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐