背景介紹
我們?cè)趯?shí)際項(xiàng)目開(kāi)發(fā)過(guò)程中,不同level的童鞋由于專業(yè)技能的層次不同,導(dǎo)致在參與實(shí)際開(kāi)發(fā)的業(yè)務(wù)代碼中經(jīng)常會(huì)出現(xiàn)各種bug,項(xiàng)目管理中好的pm或許會(huì)給充足的時(shí)間來(lái)讓開(kāi)發(fā)童鞋們定位修復(fù)這些bug,也有各種客觀原因的PM不會(huì)在項(xiàng)目中預(yù)留這些時(shí)間,往往就需要開(kāi)發(fā)自己通過(guò)加班來(lái)修復(fù)趕上項(xiàng)目整體的進(jìn)度
基于以上背景,那我們有沒(méi)有一種更有效的方式來(lái)保證業(yè)務(wù)代碼的質(zhì)量呢?
本人推薦的是通過(guò)嚴(yán)格的一套單元測(cè)試體系來(lái)保證我們的代碼質(zhì)量,當(dāng)然除此之外的手段比如code review、開(kāi)發(fā)規(guī)范等等不在本文介紹。
單元測(cè)試體系搭建
編寫單元測(cè)試代碼
針對(duì)我們的所有業(yè)務(wù)代碼的類進(jìn)行一對(duì)一時(shí)的單元測(cè)試覆蓋,如下圖所示:
- 業(yè)務(wù)代碼:
@RestController
@RequestMapping("/hello")
public class HelloWorldController {
@Autowired
private IHelloWorldService helloWorldService;
@GetMapping("/say")
public Result<String> sayHello(@RequestParam(value = "msg",required = false) String msg){
Result result = new Result();
result.setCode(200);
result.setData(helloWorldService.sayHello(msg));
result.setMsg("OK");
return result;
}
}
- 對(duì)應(yīng)的單元測(cè)試代碼如下:
@SpringBootTest
@RunWith(SpringRunner.class)
public class HelloWorldControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private IHelloWorldService helloWorldService;
@Test
public void test()throws Exception{
RequestBuilder requestBuilder = MockMvcRequestBuilders.get("/hello/say").accept(
MediaType.APPLICATION_JSON);
MvcResult result= mockMvc.perform(requestBuilder).andReturn();
Assert.assertEquals(HttpStatus.OK.value(),result.getResponse().getStatus());
}
}
選用單元測(cè)試框架
本人推薦用Jacoco即 Code Coverage for Java的縮寫或Emma,本人在idea中安裝Jacoco插件按照如下圖所示:
執(zhí)行單元測(cè)試
修改單元測(cè)試的框架:
執(zhí)行單元測(cè)試:
按照如上圖所示的操作可以看到單元測(cè)試覆蓋率如下圖:
按照如上圖所示的兩步操作完畢之后,會(huì)生成如下圖所示的site目錄:
打開(kāi)如上圖所示的index.html文件可以查看網(wǎng)頁(yè)版的單元測(cè)試覆蓋率,如下圖所示:
查看具體某一個(gè)類的單元測(cè)試覆蓋率
如上圖所示:
單元測(cè)試覆蓋率主要分為如下幾類:
1、代碼覆蓋率 (Instructions Cov.)
2、邏輯分支覆蓋率(Branches Cov.)
3、判斷行數(shù)覆蓋率(Cxty Cov.)
4、代碼行數(shù)覆蓋率(Lines Cov.)
5、方法個(gè)數(shù)覆蓋率(Methods Cov.)
6、類覆蓋率(Classes Cov.)
Missed 所在列表示當(dāng)前類型缺失的數(shù)量文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-416742.html
總結(jié)
其實(shí)在具體項(xiàng)目實(shí)操過(guò)程中發(fā)現(xiàn)做整項(xiàng)目所有類的單測(cè)工作量是巨大無(wú)比的,毫不夸張的說(shuō)編寫單元測(cè)試的代碼的工作量遠(yuǎn)遠(yuǎn)超出了實(shí)際編寫業(yè)務(wù)代碼的工作量,所以本人介紹的初衷只是告訴諸位技術(shù)層面如何有效保證代碼質(zhì)量,具體落地時(shí)因地制宜吧,根據(jù)實(shí)際項(xiàng)目情況技術(shù)負(fù)責(zé)人和PM綜合評(píng)估而定。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-416742.html
到了這里,關(guān)于如何有效保證Java代碼單元測(cè)試覆蓋率的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!