总结-18 单元测试和项目监控

单元测试

开发过程中测试是十分重要的,在我们的开发过程中,测试是贯穿整个项目的,但是实际上我们有些测试之间是存在相互依赖关系的,这样或许会在之后的测试中产生麻烦,最好的方法就是每个测试类都是项目依赖的,我们在每个类中初始化测试数据,然后再进行测试,对比结果,测试完成之后再将数据删去。
Spring Boot Test中集成了很多测试工具,常用的注解有@BeforeClass,@AfterClass,@Before,@After,其中@BeforeClass和@AfterClass会在测试类构造之前和消解之后执行,@Before和@After会在该测试各个方法之前和之后执行。
接下来给出一个demo。在@Before注解声明的before()方法中我们对测试数据进行初始化,然后在测试方法中使用,然后在@After注解的after()方法中删除该数据。在测试方法中我们可以使用断言来判断测试方法是否通过。Assert.assertEquals()第一个参数表示期望值,第二个参数表示实际值,第三个参数是可选的。

@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration(classes = CommunityApplication.class)
public class SpringBootTests {

    @Autowired
    private DiscussPostService discussPostService;

    DiscussPost data;

    @BeforeClass
    public static void beforeClass() {
        System.out.println("beforeClass");
    }

    @AfterClass
    public static void AfterClass() {
        System.out.println("AfterClass");
    }

    @Before
    public void before(){
        System.out.println("before");

        // 初始化测试数据
        data = new DiscussPost();
        data.setUserId(111);
        data.setTitle("Test Title");
        data.setContent("test Content");
        data.setCreateTime(new Date());
        discussPostService.addDiscussPost(data);

    }

    @After
    public void after(){
        System.out.println("after");

        // 删除测试数据
        discussPostService.updateStatus(data.getId(),2);
    }

    @Test
    public void test1(){
        System.out.println("test1");
    }

    @Test
    public void test2(){
        System.out.println("test2");
    }

    @Test
    public void testFindById(){
        DiscussPost post = discussPostService.findDiscussPostByid(data.getId());
        Assert.assertNotNull(post);
        Assert.assertEquals(data.getTitle(), post.getTitle());
        Assert.assertEquals(data.getContent(), post.getContent());
    }

    @Test
    public void testUpdateScore(){
        int row = discussPostService.updateScore(data.getId(),2000.00);
        Assert.assertEquals(1,row);

        DiscussPost post = discussPostService.findDiscussPostByid(data.getId());
        Assert.assertEquals(2000.00,post.getScore(),2);

    }
}

如果不通过会给出错误提示
错误提示

项目监控

项目的监控我们需要用到spring boot actuator来帮助我们监控项目,其核心是EndPoints,即监控程序应用入口,可以通过http或者jmx来访问得到。其默认开发的端口有很多,我们可以进行配置,下面的配置表示引入全部的端口,然后排除/info和/caches,当然我们可以自定义配置

# actuator
management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=info,caches

引入自定义端口

我们可以通过@EndPoint注解引入自定义端口,比如我们实现一个连接数据库的自定义端口,我们在@EndPoint注解中声明id来表示访问路径,然后在相应的方法使用@ReadOperation来表示访问的方法是GET(@WriteOperation表示POST)

@Component
@Endpoint(id = "database")
public class DatabaseEndPoint {

    private static final Logger logger = LoggerFactory.getLogger(DatabaseEndPoint.class);

    @Autowired
    private DataSource dataSource;

    @ReadOperation
    public String checkConnection(){
        try(
                Connection conn = dataSource.getConnection();
                ){
            return CommunityUtil.getJSONString(200,"获取连接成功");
        } catch (SQLException e){
            logger.error("获取连接失败:" + e.getMessage());
            return CommunityUtil.getJSONString(400,"获取连接失败!");
        }
    }

}

设置权限

对于项目监控的端点路径我们必须设置权限,必须是管理员才能访问,因此我们需要对权限进行配置。

.antMatchers(
        "/discuss/delete",
        "/data/**",
        "/actuator/**"
)
.hasAnyAuthority(
        AUTHORITY_ADMIN
)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值