seata/docs/zh-cn/developers/contributor-guide/test-coverage-guide_dev.md

40 lines
2.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 测试覆盖率向导
keywords: Seata
description: 测试覆盖率向导。
---
# 测试覆盖率向导
## 测试粒度如何划分
<img src="https://microservices.io/i/test-pyramid.jpeg">
测试粒度如何划分是个大问题。Chris Richardson 在" [降低测试金字塔:微服务的有效测试策略](https://microservices.io/microservices/testing/2019/09/20/oracle-code-one-testing.html)" 一文中将服务测试划分为:单元测试、集成测试、组件测试、端到端的测试。我们可以在设计测试用例的过程中,拿来借鉴。
## 单元测试
### 1.写单元测试的收益
* 单元测试能帮助每个人深入代码细节,了解代码的功能。
* 通过测试用例我们能发现bug并提交代码的健壮性。
* 测试用例同时也是代码的demo用法。
### 2.单元测试用例的一些设计原则
* 应该精心设计好步骤,颗粒度和组合条件。
* 注意边界条件。
* 单元测试也应该好好设计,不要写无用的代码。
* 当你发现一个`方法`很难写单元测试时,如果可以确认这个`方法`是`臭代码`,那么就和开发者一起重构它。
* Seata中用的mock框架是: [mockito](http://site.mockito.org/). 下面是一些开发向导:[mockito tutorial](http://www.baeldung.com/bdd-mockito),[mockito refcard](https://dzone.com/refcardz/mockito)
* TDD可选当你开始写一个新的功能时你可以试着先写测试用例。
### 3.测试覆盖率设定值
* 在现阶段Delta更改代码的测试覆盖设定值为>80%,越高越好。
* 我们可以在这个页面中看到测试报告: https://codecov.io/gh/seata/seata
### 4.项目约定
* Seata 项目的单元测试用例分布在项目每个子模块中测试断言类以Test结尾。
## 集成测试
### 项目约定
* 集成测试在本项目泛指单元测试以上级别的测试。
* 项目使用[github actions](https://help.github.com/cn/actions/automating-your-workflow-with-github-actions)、[jiblib maven 插件](https://github.com/GoogleContainerTools/jib)、[fabric maven 插件](https://github.com/fabric8io/fabric8-maven-plugin)、[testContainers](https://github.com/testcontainers/testcontainers-java)等用来构建[Docker](https://www.docker.com/)镜像,搭建集成测试环境
* 区别于单元测试某个测试用例需要依赖第三方中间件的可以不用Mock, 使用上面介绍的工具搭建docker环境,进行测试。但是也要注意搭建组件的粒度。过于复杂的环境可以核心测试依赖的中间件可以docker搭建非强依赖的可以Mock
* Seata 项目的集成测试用例分布统一放在integration-test子模块中测试断言类以IT结尾。
* 这里还用 [Junit5](https://junit.org/junit5/)
* 测试用例并行跑的过程中,注意公共中间件的隔离状态,规划好所造数据,防止冲突。