[{"data":1,"prerenderedAt":1808},["ShallowReactive",2],{"content:\u002F2025\u002F07\u002Fgo-test":3,"surround:\u002F2025\u002F07\u002Fgo-test":1799},{"id":4,"title":5,"body":6,"categories":1775,"date":1777,"description":1778,"draft":1779,"extension":1780,"image":1781,"meta":1782,"navigation":140,"path":1784,"permalink":1781,"published":1781,"readingTime":1785,"recommend":1781,"references":1781,"seo":1790,"sitemap":1791,"stem":1792,"tags":1793,"type":1796,"updated":1797,"__hash__":1798},"content\u002Fposts\u002F2025\u002F07\u002Fgo-test.md","Go 单元测试与覆盖率实践",{"type":7,"value":8,"toc":1765},"minimark",[9,13,32,36,104,107,113,243,248,405,409,412,415,423,427,430,514,517,520,577,580,760,763,817,820,823,1111,1114,1183,1194,1196,1291,1296,1299,1644,1651,1761],[10,11,12],"p",{},"今天来研究一下go自带的单元测试(testing库)，来测试程序返回值是否达到预期结果",[14,15,16],"blockquote",{},[10,17,18,19,23,24,27,28,31],{},"使用方法是执行",[20,21,22],"code",{"code":22},"go test","会执行当前目录所有以",[20,25,26],{"code":26},"_test","结尾,以",[20,29,30],{"code":30},"Test","开头的函数",[33,34,35],"h2",{"id":35},"参数说明",[37,38,39,55],"table",{},[40,41,42],"thead",{},[43,44,45,49,52],"tr",{},[46,47,48],"th",{},"参数",[46,50,51],{},"作用",[46,53,54],{},"示例",[56,57,58,74,89],"tbody",{},[43,59,60,66,69],{},[61,62,63],"td",{},[20,64,65],{"code":65},"-v",[61,67,68],{},"显示测试的详细信息（verbose 模式）",[61,70,71],{},[20,72,73],{"code":73},"go test -v",[43,75,76,81,84],{},[61,77,78],{},[20,79,80],{"code":80},"-run Testxxx",[61,82,83],{},"只运行特定的测试函数",[61,85,86],{},[20,87,88],{"code":88},"go test -run TestAbs",[43,90,91,96,99],{},[61,92,93],{},[20,94,95],{"code":95},"-cover",[61,97,98],{},"查看单元测试覆盖率",[61,100,101],{},[20,102,103],{"code":103},"go test -cover",[33,105,106],{"id":106},"简单例子",[10,108,109],{},[110,111,112],"strong",{},"abs.go",[114,115,120],"pre",{"className":116,"code":117,"language":118,"meta":119,"style":119},"language-go shiki shiki-themes github-light github-dark","package abs\n\nfunc Abs(num int) int {\n\tif num \u003C 0 {\n\t\treturn -num\n\t}\n\treturn num\n}\n","go","",[20,121,122,135,142,177,202,218,228,238],{"__ignoreMap":119},[123,124,127,131],"span",{"class":125,"data-line":126,"line":126},"line",1,[123,128,130],{"class":129},"szBVR","package",[123,132,134],{"class":133},"sScJk"," abs\n",[123,136,138],{"class":125,"data-line":137,"line":137},2,[123,139,141],{"emptyLinePlaceholder":140},true,"\n",[123,143,145,148,151,155,159,162,165,169,172,174],{"class":125,"data-line":144,"line":144},3,[123,146,147],{"class":129},"func",[123,149,150],{"class":133}," Abs",[123,152,154],{"class":153},"sSDpw","(",[123,156,158],{"class":157},"s4XuR","num",[123,160,161],{"class":129}," int",[123,163,164],{"class":153},")",[123,166,168],{"class":167},"sVt8B"," ",[123,170,171],{"class":129},"int",[123,173,168],{"class":167},[123,175,176],{"class":153},"{\n",[123,178,180,184,187,190,193,197,199],{"class":125,"data-line":179,"line":179},4,[123,181,183],{"class":182},"indent","\t",[123,185,186],{"class":129},"if",[123,188,189],{"class":167}," num ",[123,191,192],{"class":129},"\u003C",[123,194,196],{"class":195},"sj4cs"," 0",[123,198,168],{"class":167},[123,200,176],{"class":201},"sJX2D",[123,203,205,207,209,212,215],{"class":125,"data-line":204,"line":204},5,[123,206,183],{"class":182},[123,208,183],{"class":182},[123,210,211],{"class":129},"return",[123,213,214],{"class":129}," -",[123,216,217],{"class":167},"num\n",[123,219,221,223,225],{"class":125,"data-line":220,"line":220},6,[123,222,183],{"class":182},[123,224,119],{"class":167},[123,226,227],{"class":201},"}\n",[123,229,231,233,235],{"class":125,"data-line":230,"line":230},7,[123,232,183],{"class":182},[123,234,211],{"class":129},[123,236,237],{"class":167}," num\n",[123,239,241],{"class":125,"data-line":240,"line":240},8,[123,242,227],{"class":153},[10,244,245],{},[110,246,247],{},"abs_test.go",[114,249,251],{"className":116,"code":250,"language":118,"meta":119,"style":119},"package abs\n\nimport \"testing\"\n\nfunc TestAbs(t *testing.T) {\n\tnum := Abs(-1)\n\tif num != 1 {\n\t\tt.Errorf(\"expected: %d,get: %d\", 1, num)\n\t}\n}\n",[20,252,253,259,263,278,282,311,334,352,391,400],{"__ignoreMap":119},[123,254,255,257],{"class":125,"data-line":126,"line":126},[123,256,130],{"class":129},[123,258,134],{"class":133},[123,260,261],{"class":125,"data-line":137,"line":137},[123,262,141],{"emptyLinePlaceholder":140},[123,264,265,268,272,275],{"class":125,"data-line":144,"line":144},[123,266,267],{"class":129},"import",[123,269,271],{"class":270},"sZZnC"," \"",[123,273,274],{"class":133},"testing",[123,276,277],{"class":270},"\"\n",[123,279,280],{"class":125,"data-line":179,"line":179},[123,281,141],{"emptyLinePlaceholder":140},[123,283,284,286,289,291,294,297,299,302,305,307,309],{"class":125,"data-line":204,"line":204},[123,285,147],{"class":129},[123,287,288],{"class":133}," TestAbs",[123,290,154],{"class":153},[123,292,293],{"class":157},"t",[123,295,296],{"class":129}," *",[123,298,274],{"class":133},[123,300,301],{"class":167},".",[123,303,304],{"class":133},"T",[123,306,164],{"class":153},[123,308,168],{"class":167},[123,310,176],{"class":153},[123,312,313,315,318,321,323,325,328,331],{"class":125,"data-line":220,"line":220},[123,314,183],{"class":182},[123,316,317],{"class":167},"num ",[123,319,320],{"class":129},":=",[123,322,150],{"class":133},[123,324,154],{"class":201},[123,326,327],{"class":129},"-",[123,329,330],{"class":195},"1",[123,332,333],{"class":201},")\n",[123,335,336,338,340,342,345,348,350],{"class":125,"data-line":230,"line":230},[123,337,183],{"class":182},[123,339,186],{"class":129},[123,341,189],{"class":167},[123,343,344],{"class":129},"!=",[123,346,347],{"class":195}," 1",[123,349,168],{"class":167},[123,351,176],{"class":201},[123,353,354,356,358,361,364,367,370,373,376,378,381,384,386,389],{"class":125,"data-line":240,"line":240},[123,355,183],{"class":182},[123,357,183],{"class":182},[123,359,360],{"class":167},"t.",[123,362,363],{"class":133},"Errorf",[123,365,154],{"class":366},"sqkie",[123,368,369],{"class":270},"\"expected: ",[123,371,372],{"class":195},"%d",[123,374,375],{"class":270},",get: ",[123,377,372],{"class":195},[123,379,380],{"class":270},"\"",[123,382,383],{"class":167},", ",[123,385,330],{"class":195},[123,387,388],{"class":167},", num",[123,390,333],{"class":366},[123,392,394,396,398],{"class":125,"data-line":393,"line":393},9,[123,395,183],{"class":182},[123,397,119],{"class":167},[123,399,227],{"class":201},[123,401,403],{"class":125,"data-line":402,"line":402},10,[123,404,227],{"class":153},[406,407,73],"h3",{"id":408},"go-test-v",[10,410,411],{},"这是一个判断绝对值函数是否获得预期结果的测试用例",[10,413,414],{},"运行结果:",[114,416,421],{"className":417,"code":419,"language":420,"meta":119},[418],"language-text","=== RUN   TestAbs\n--- PASS: TestAbs (0.00s)\nPASS\n","text",[20,422,419],{"__ignoreMap":119},[406,424,426],{"id":425},"go-test-run","go test -run",[10,428,429],{},"测试特定函数输出详细信息:",[114,431,435],{"className":432,"code":433,"language":434,"meta":119,"style":119},"language-powershell shiki shiki-themes github-light github-dark","PS D:\\code\\go\\fucking-golang\\go-test> go test -v -run TestAbs\n=== RUN   TestAbs\n--- PASS: TestAbs (0.00s)\nPASS\nok      go-test 0.528s\n","powershell",[20,436,437,468,476,494,499],{"__ignoreMap":119},[123,438,439,442,444,447,449,452,455,458,460,463,465],{"class":125,"data-line":126,"line":126},[123,440,441],{"class":167},"PS D:\\code\\go\\fucking",[123,443,327],{"class":129},[123,445,446],{"class":167},"golang\\go",[123,448,327],{"class":129},[123,450,451],{"class":167},"test",[123,453,454],{"class":129},">",[123,456,457],{"class":167}," go test ",[123,459,327],{"class":129},[123,461,462],{"class":167},"v ",[123,464,327],{"class":129},[123,466,467],{"class":167},"run TestAbs\n",[123,469,470,473],{"class":125,"data-line":137,"line":137},[123,471,472],{"class":129},"===",[123,474,475],{"class":167}," RUN   TestAbs\n",[123,477,478,481,484,486,489,492],{"class":125,"data-line":144,"line":144},[123,479,480],{"class":129},"---",[123,482,483],{"class":167}," PASS: TestAbs ",[123,485,154],{"class":153},[123,487,488],{"class":195},"0.",[123,490,491],{"class":167},"00s",[123,493,333],{"class":153},[123,495,496],{"class":125,"data-line":179,"line":179},[123,497,498],{"class":167},"PASS\n",[123,500,501,504,506,509,511],{"class":125,"data-line":204,"line":204},[123,502,503],{"class":167},"ok      go",[123,505,327],{"class":129},[123,507,508],{"class":167},"test ",[123,510,488],{"class":195},[123,512,513],{"class":167},"528s\n",[406,515,103],{"id":516},"go-test-cover",[10,518,519],{},"测试用例在功能代码中的覆盖率:",[114,521,523],{"className":432,"code":522,"language":434,"meta":119,"style":119},"PS D:\\code\\go\\fucking-golang\\go-test> go test -cover          \nPASS\ncoverage: 66.7% of statements\nok      go-test 0.759s\n",[20,524,525,546,550,564],{"__ignoreMap":119},[123,526,527,529,531,533,535,537,539,541,543],{"class":125,"data-line":126,"line":126},[123,528,441],{"class":167},[123,530,327],{"class":129},[123,532,446],{"class":167},[123,534,327],{"class":129},[123,536,451],{"class":167},[123,538,454],{"class":129},[123,540,457],{"class":167},[123,542,327],{"class":129},[123,544,545],{"class":167},"cover          \n",[123,547,548],{"class":125,"data-line":137,"line":137},[123,549,498],{"class":167},[123,551,552,555,558,561],{"class":125,"data-line":144,"line":144},[123,553,554],{"class":167},"coverage: ",[123,556,557],{"class":195},"66.7",[123,559,560],{"class":129},"%",[123,562,563],{"class":167}," of statements\n",[123,565,566,568,570,572,574],{"class":125,"data-line":179,"line":179},[123,567,503],{"class":167},[123,569,327],{"class":129},[123,571,508],{"class":167},[123,573,488],{"class":195},[123,575,576],{"class":167},"759s\n",[10,578,579],{},"因为没有正数的绝对值判断",[114,581,583],{"className":116,"code":582,"language":118,"meta":119,"style":119},"func TestAbs(t *testing.T) {\n\tnum := Abs(-1)\n\tif num != 1 {\n\t\tt.Errorf(\"expected: %d,get: %d\", 1, num)\n\t}\n\tnum2 := Abs(3)\n\tif num2 != 3 {\n\t\tt.Errorf(\"expected: %d,get: %d\", 3, num2)\n\t}\n}\n",[20,584,585,609,627,643,673,681,699,717,748,756],{"__ignoreMap":119},[123,586,587,589,591,593,595,597,599,601,603,605,607],{"class":125,"data-line":126,"line":126},[123,588,147],{"class":129},[123,590,288],{"class":133},[123,592,154],{"class":153},[123,594,293],{"class":157},[123,596,296],{"class":129},[123,598,274],{"class":133},[123,600,301],{"class":167},[123,602,304],{"class":133},[123,604,164],{"class":153},[123,606,168],{"class":167},[123,608,176],{"class":153},[123,610,611,613,615,617,619,621,623,625],{"class":125,"data-line":137,"line":137},[123,612,183],{"class":182},[123,614,317],{"class":167},[123,616,320],{"class":129},[123,618,150],{"class":133},[123,620,154],{"class":201},[123,622,327],{"class":129},[123,624,330],{"class":195},[123,626,333],{"class":201},[123,628,629,631,633,635,637,639,641],{"class":125,"data-line":144,"line":144},[123,630,183],{"class":182},[123,632,186],{"class":129},[123,634,189],{"class":167},[123,636,344],{"class":129},[123,638,347],{"class":195},[123,640,168],{"class":167},[123,642,176],{"class":201},[123,644,645,647,649,651,653,655,657,659,661,663,665,667,669,671],{"class":125,"data-line":179,"line":179},[123,646,183],{"class":182},[123,648,183],{"class":182},[123,650,360],{"class":167},[123,652,363],{"class":133},[123,654,154],{"class":366},[123,656,369],{"class":270},[123,658,372],{"class":195},[123,660,375],{"class":270},[123,662,372],{"class":195},[123,664,380],{"class":270},[123,666,383],{"class":167},[123,668,330],{"class":195},[123,670,388],{"class":167},[123,672,333],{"class":366},[123,674,675,677,679],{"class":125,"data-line":204,"line":204},[123,676,183],{"class":182},[123,678,119],{"class":167},[123,680,227],{"class":201},[123,682,683,685,688,690,692,694,697],{"class":125,"data-line":220,"line":220},[123,684,183],{"class":182},[123,686,687],{"class":167},"num2 ",[123,689,320],{"class":129},[123,691,150],{"class":133},[123,693,154],{"class":201},[123,695,696],{"class":195},"3",[123,698,333],{"class":201},[123,700,701,703,705,708,710,713,715],{"class":125,"data-line":230,"line":230},[123,702,183],{"class":182},[123,704,186],{"class":129},[123,706,707],{"class":167}," num2 ",[123,709,344],{"class":129},[123,711,712],{"class":195}," 3",[123,714,168],{"class":167},[123,716,176],{"class":201},[123,718,719,721,723,725,727,729,731,733,735,737,739,741,743,746],{"class":125,"data-line":240,"line":240},[123,720,183],{"class":182},[123,722,183],{"class":182},[123,724,360],{"class":167},[123,726,363],{"class":133},[123,728,154],{"class":366},[123,730,369],{"class":270},[123,732,372],{"class":195},[123,734,375],{"class":270},[123,736,372],{"class":195},[123,738,380],{"class":270},[123,740,383],{"class":167},[123,742,696],{"class":195},[123,744,745],{"class":167},", num2",[123,747,333],{"class":366},[123,749,750,752,754],{"class":125,"data-line":393,"line":393},[123,751,183],{"class":182},[123,753,119],{"class":167},[123,755,227],{"class":201},[123,757,758],{"class":125,"data-line":402,"line":402},[123,759,227],{"class":153},[10,761,762],{},"加上后得出结果",[114,764,766],{"className":432,"code":765,"language":434,"meta":119,"style":119},"PS D:\\code\\go\\fucking-golang\\go-test> go test -cover\nPASS\ncoverage: 100.0% of statements\nok      go-test 0.626s\n",[20,767,768,789,793,804],{"__ignoreMap":119},[123,769,770,772,774,776,778,780,782,784,786],{"class":125,"data-line":126,"line":126},[123,771,441],{"class":167},[123,773,327],{"class":129},[123,775,446],{"class":167},[123,777,327],{"class":129},[123,779,451],{"class":167},[123,781,454],{"class":129},[123,783,457],{"class":167},[123,785,327],{"class":129},[123,787,788],{"class":167},"cover\n",[123,790,791],{"class":125,"data-line":137,"line":137},[123,792,498],{"class":167},[123,794,795,797,800,802],{"class":125,"data-line":144,"line":144},[123,796,554],{"class":167},[123,798,799],{"class":195},"100.0",[123,801,560],{"class":129},[123,803,563],{"class":167},[123,805,806,808,810,812,814],{"class":125,"data-line":179,"line":179},[123,807,503],{"class":167},[123,809,327],{"class":129},[123,811,508],{"class":167},[123,813,488],{"class":195},[123,815,816],{"class":167},"626s\n",[33,818,819],{"id":819},"测试组",[10,821,822],{},"有时候一个个测试非常麻烦，每一个用例就要一个if判断，非常冗余，所以可以将其封装成一个结构体",[114,824,826],{"className":116,"code":825,"language":118,"meta":119,"style":119},"func TestAbs2(t *testing.T) {\n\ttype testCase struct {\n\t\tinput  int\n\t\toutput int\n\t}\n\ttc := []testCase{\n\t\t{1, 1},\n\t\t{-1, -1},\n\t\t{0, 0},\n\t}\n\tfor _, c := range tc {\n\t\tif Abs(c.input) != c.output {\n\t\t\tt.Errorf(\"expected: %d,get: %d\", c.output, Abs(c.input))\n\t\t}\n\t}\n}\n",[20,827,828,853,870,882,893,901,923,946,970,991,999,1020,1047,1086,1097,1106],{"__ignoreMap":119},[123,829,830,832,835,837,839,841,843,845,847,849,851],{"class":125,"data-line":126,"line":126},[123,831,147],{"class":129},[123,833,834],{"class":133}," TestAbs2",[123,836,154],{"class":153},[123,838,293],{"class":157},[123,840,296],{"class":129},[123,842,274],{"class":133},[123,844,301],{"class":167},[123,846,304],{"class":133},[123,848,164],{"class":153},[123,850,168],{"class":167},[123,852,176],{"class":153},[123,854,855,857,860,863,866,868],{"class":125,"data-line":137,"line":137},[123,856,183],{"class":182},[123,858,859],{"class":129},"type",[123,861,862],{"class":133}," testCase",[123,864,865],{"class":129}," struct",[123,867,168],{"class":167},[123,869,176],{"class":201},[123,871,872,874,876,879],{"class":125,"data-line":144,"line":144},[123,873,183],{"class":182},[123,875,183],{"class":182},[123,877,878],{"class":167},"input  ",[123,880,881],{"class":129},"int\n",[123,883,884,886,888,891],{"class":125,"data-line":179,"line":179},[123,885,183],{"class":182},[123,887,183],{"class":182},[123,889,890],{"class":167},"output ",[123,892,881],{"class":129},[123,894,895,897,899],{"class":125,"data-line":204,"line":204},[123,896,183],{"class":182},[123,898,119],{"class":167},[123,900,227],{"class":201},[123,902,903,905,908,910,912,915,918,921],{"class":125,"data-line":220,"line":220},[123,904,183],{"class":182},[123,906,907],{"class":167},"tc ",[123,909,320],{"class":129},[123,911,168],{"class":167},[123,913,914],{"class":201},"[",[123,916,917],{"class":201},"]",[123,919,920],{"class":133},"testCase",[123,922,176],{"class":201},[123,924,925,927,929,931,934,936,938,940,943],{"class":125,"data-line":230,"line":230},[123,926,183],{"class":182},[123,928,183],{"class":182},[123,930,119],{"class":167},[123,932,933],{"class":366},"{",[123,935,330],{"class":195},[123,937,383],{"class":167},[123,939,330],{"class":195},[123,941,942],{"class":366},"}",[123,944,945],{"class":167},",\n",[123,947,948,950,952,954,956,958,960,962,964,966,968],{"class":125,"data-line":240,"line":240},[123,949,183],{"class":182},[123,951,183],{"class":182},[123,953,119],{"class":167},[123,955,933],{"class":366},[123,957,327],{"class":129},[123,959,330],{"class":195},[123,961,383],{"class":167},[123,963,327],{"class":129},[123,965,330],{"class":195},[123,967,942],{"class":366},[123,969,945],{"class":167},[123,971,972,974,976,978,980,983,985,987,989],{"class":125,"data-line":393,"line":393},[123,973,183],{"class":182},[123,975,183],{"class":182},[123,977,119],{"class":167},[123,979,933],{"class":366},[123,981,982],{"class":195},"0",[123,984,383],{"class":167},[123,986,982],{"class":195},[123,988,942],{"class":366},[123,990,945],{"class":167},[123,992,993,995,997],{"class":125,"data-line":402,"line":402},[123,994,183],{"class":182},[123,996,119],{"class":167},[123,998,227],{"class":201},[123,1000,1002,1004,1007,1010,1012,1015,1018],{"class":125,"data-line":1001,"line":1001},11,[123,1003,183],{"class":182},[123,1005,1006],{"class":129},"for",[123,1008,1009],{"class":167}," _, c ",[123,1011,320],{"class":129},[123,1013,1014],{"class":129}," range",[123,1016,1017],{"class":167}," tc ",[123,1019,176],{"class":201},[123,1021,1023,1025,1027,1029,1031,1033,1036,1038,1040,1042,1045],{"class":125,"data-line":1022,"line":1022},12,[123,1024,183],{"class":182},[123,1026,183],{"class":182},[123,1028,186],{"class":129},[123,1030,150],{"class":133},[123,1032,154],{"class":366},[123,1034,1035],{"class":167},"c.input",[123,1037,164],{"class":366},[123,1039,168],{"class":167},[123,1041,344],{"class":129},[123,1043,1044],{"class":167}," c.output ",[123,1046,176],{"class":366},[123,1048,1050,1052,1054,1056,1058,1060,1062,1064,1066,1068,1070,1072,1075,1078,1080,1082,1084],{"class":125,"data-line":1049,"line":1049},13,[123,1051,183],{"class":182},[123,1053,183],{"class":182},[123,1055,183],{"class":182},[123,1057,360],{"class":167},[123,1059,363],{"class":133},[123,1061,154],{"class":153},[123,1063,369],{"class":270},[123,1065,372],{"class":195},[123,1067,375],{"class":270},[123,1069,372],{"class":195},[123,1071,380],{"class":270},[123,1073,1074],{"class":167},", c.output, ",[123,1076,1077],{"class":133},"Abs",[123,1079,154],{"class":201},[123,1081,1035],{"class":167},[123,1083,164],{"class":201},[123,1085,333],{"class":153},[123,1087,1089,1091,1093,1095],{"class":125,"data-line":1088,"line":1088},14,[123,1090,183],{"class":182},[123,1092,183],{"class":182},[123,1094,119],{"class":167},[123,1096,227],{"class":366},[123,1098,1100,1102,1104],{"class":125,"data-line":1099,"line":1099},15,[123,1101,183],{"class":182},[123,1103,119],{"class":167},[123,1105,227],{"class":201},[123,1107,1109],{"class":125,"data-line":1108,"line":1108},16,[123,1110,227],{"class":153},[10,1112,1113],{},"测试结果:",[114,1115,1117],{"className":432,"code":1116,"language":434,"meta":119,"style":119},"PS D:\\code\\go\\fucking-golang\\go-test> go test -v -run TestAbs2\n=== RUN   TestAbs2\n--- PASS: TestAbs2 (0.00s)\nPASS\nok      go-test 0.523s\n",[20,1118,1119,1144,1151,1166,1170],{"__ignoreMap":119},[123,1120,1121,1123,1125,1127,1129,1131,1133,1135,1137,1139,1141],{"class":125,"data-line":126,"line":126},[123,1122,441],{"class":167},[123,1124,327],{"class":129},[123,1126,446],{"class":167},[123,1128,327],{"class":129},[123,1130,451],{"class":167},[123,1132,454],{"class":129},[123,1134,457],{"class":167},[123,1136,327],{"class":129},[123,1138,462],{"class":167},[123,1140,327],{"class":129},[123,1142,1143],{"class":167},"run TestAbs2\n",[123,1145,1146,1148],{"class":125,"data-line":137,"line":137},[123,1147,472],{"class":129},[123,1149,1150],{"class":167}," RUN   TestAbs2\n",[123,1152,1153,1155,1158,1160,1162,1164],{"class":125,"data-line":144,"line":144},[123,1154,480],{"class":129},[123,1156,1157],{"class":167}," PASS: TestAbs2 ",[123,1159,154],{"class":153},[123,1161,488],{"class":195},[123,1163,491],{"class":167},[123,1165,333],{"class":153},[123,1167,1168],{"class":125,"data-line":179,"line":179},[123,1169,498],{"class":167},[123,1171,1172,1174,1176,1178,1180],{"class":125,"data-line":204,"line":204},[123,1173,503],{"class":167},[123,1175,327],{"class":129},[123,1177,508],{"class":167},[123,1179,488],{"class":195},[123,1181,1182],{"class":167},"523s\n",[10,1184,1185,1186,1189,1190,1193],{},"将",[20,1187,1188],{"code":1188},"{-1, 1}","改成",[20,1191,1192],{"code":1192},"{-1, -1}","就会出错",[10,1195,1113],{},[114,1197,1199],{"className":432,"code":1198,"language":434,"meta":119,"style":119},"PS D:\\code\\go\\fucking-golang\\go-test> go test -run TestAbs2   \n--- FAIL: TestAbs2 (0.00s)\n    abs_test.go:28: expected: -1,get: 1\nFAIL\nexit status 1\nFAIL    go-test 0.523s\n",[20,1200,1201,1222,1237,1263,1268,1278],{"__ignoreMap":119},[123,1202,1203,1205,1207,1209,1211,1213,1215,1217,1219],{"class":125,"data-line":126,"line":126},[123,1204,441],{"class":167},[123,1206,327],{"class":129},[123,1208,446],{"class":167},[123,1210,327],{"class":129},[123,1212,451],{"class":167},[123,1214,454],{"class":129},[123,1216,457],{"class":167},[123,1218,327],{"class":129},[123,1220,1221],{"class":167},"run TestAbs2   \n",[123,1223,1224,1226,1229,1231,1233,1235],{"class":125,"data-line":137,"line":137},[123,1225,480],{"class":129},[123,1227,1228],{"class":167}," FAIL: TestAbs2 ",[123,1230,154],{"class":153},[123,1232,488],{"class":195},[123,1234,491],{"class":167},[123,1236,333],{"class":153},[123,1238,1239,1242,1245,1248,1251,1254,1257,1260],{"class":125,"data-line":144,"line":144},[123,1240,1241],{"class":182},"    ",[123,1243,1244],{"class":167},"abs_test.go:",[123,1246,1247],{"class":195},"28",[123,1249,1250],{"class":167},": expected: ",[123,1252,1253],{"class":195},"-1",[123,1255,1256],{"class":129},",",[123,1258,1259],{"class":167},"get: ",[123,1261,1262],{"class":195},"1\n",[123,1264,1265],{"class":125,"data-line":179,"line":179},[123,1266,1267],{"class":167},"FAIL\n",[123,1269,1270,1273,1276],{"class":125,"data-line":204,"line":204},[123,1271,1272],{"class":129},"exit",[123,1274,1275],{"class":167}," status ",[123,1277,1262],{"class":195},[123,1279,1280,1283,1285,1287,1289],{"class":125,"data-line":220,"line":220},[123,1281,1282],{"class":167},"FAIL    go",[123,1284,327],{"class":129},[123,1286,508],{"class":167},[123,1288,488],{"class":195},[123,1290,1182],{"class":167},[14,1292,1293],{},[10,1294,1295],{},"但是如果测试用例较多，则不好判断具体出错",[33,1297,1298],{"id":1298},"子测试",[114,1300,1302],{"className":116,"code":1301,"language":118,"meta":119,"style":119},"func TestAbs3(t *testing.T) {\n    type testCase struct {\n       input  int\n       output int\n    }\n    testCaseMap := map[string]testCase{\n       \"No1\": {1, 1},\n       \"No2\": {-1, -1},\n       \"No3\": {0, 0},\n    }\n    for key, tc := range testCaseMap {\n       t.Run(key, func(t *testing.T) {\n          got := Abs(tc.input)\n          if got != tc.output {\n             t.Errorf(\"expected: %d,get: %d\", tc.output, got)\n          }\n       })\n    }\n}\n",[20,1303,1304,1329,1343,1354,1364,1372,1395,1419,1446,1469,1477,1495,1531,1554,1574,1605,1617,1630,1639],{"__ignoreMap":119},[123,1305,1306,1308,1311,1313,1315,1317,1319,1321,1323,1325,1327],{"class":125,"data-line":126,"line":126},[123,1307,147],{"class":129},[123,1309,1310],{"class":133}," TestAbs3",[123,1312,154],{"class":153},[123,1314,293],{"class":157},[123,1316,296],{"class":129},[123,1318,274],{"class":133},[123,1320,301],{"class":167},[123,1322,304],{"class":133},[123,1324,164],{"class":153},[123,1326,168],{"class":167},[123,1328,176],{"class":153},[123,1330,1331,1333,1335,1337,1339,1341],{"class":125,"data-line":137,"line":137},[123,1332,1241],{"class":182},[123,1334,859],{"class":129},[123,1336,862],{"class":133},[123,1338,865],{"class":129},[123,1340,168],{"class":167},[123,1342,176],{"class":201},[123,1344,1345,1347,1350,1352],{"class":125,"data-line":144,"line":144},[123,1346,1241],{"class":182},[123,1348,1349],{"class":182},"   ",[123,1351,878],{"class":167},[123,1353,881],{"class":129},[123,1355,1356,1358,1360,1362],{"class":125,"data-line":179,"line":179},[123,1357,1241],{"class":182},[123,1359,1349],{"class":182},[123,1361,890],{"class":167},[123,1363,881],{"class":129},[123,1365,1366,1368,1370],{"class":125,"data-line":204,"line":204},[123,1367,1241],{"class":182},[123,1369,119],{"class":167},[123,1371,227],{"class":201},[123,1373,1374,1376,1379,1381,1384,1386,1389,1391,1393],{"class":125,"data-line":220,"line":220},[123,1375,1241],{"class":182},[123,1377,1378],{"class":167},"testCaseMap ",[123,1380,320],{"class":129},[123,1382,1383],{"class":129}," map",[123,1385,914],{"class":201},[123,1387,1388],{"class":129},"string",[123,1390,917],{"class":201},[123,1392,920],{"class":133},[123,1394,176],{"class":201},[123,1396,1397,1399,1401,1404,1407,1409,1411,1413,1415,1417],{"class":125,"data-line":230,"line":230},[123,1398,1241],{"class":182},[123,1400,1349],{"class":182},[123,1402,1403],{"class":270},"\"No1\"",[123,1405,1406],{"class":167},": ",[123,1408,933],{"class":366},[123,1410,330],{"class":195},[123,1412,383],{"class":167},[123,1414,330],{"class":195},[123,1416,942],{"class":366},[123,1418,945],{"class":167},[123,1420,1421,1423,1425,1428,1430,1432,1434,1436,1438,1440,1442,1444],{"class":125,"data-line":240,"line":240},[123,1422,1241],{"class":182},[123,1424,1349],{"class":182},[123,1426,1427],{"class":270},"\"No2\"",[123,1429,1406],{"class":167},[123,1431,933],{"class":366},[123,1433,327],{"class":129},[123,1435,330],{"class":195},[123,1437,383],{"class":167},[123,1439,327],{"class":129},[123,1441,330],{"class":195},[123,1443,942],{"class":366},[123,1445,945],{"class":167},[123,1447,1448,1450,1452,1455,1457,1459,1461,1463,1465,1467],{"class":125,"data-line":393,"line":393},[123,1449,1241],{"class":182},[123,1451,1349],{"class":182},[123,1453,1454],{"class":270},"\"No3\"",[123,1456,1406],{"class":167},[123,1458,933],{"class":366},[123,1460,982],{"class":195},[123,1462,383],{"class":167},[123,1464,982],{"class":195},[123,1466,942],{"class":366},[123,1468,945],{"class":167},[123,1470,1471,1473,1475],{"class":125,"data-line":402,"line":402},[123,1472,1241],{"class":182},[123,1474,119],{"class":167},[123,1476,227],{"class":201},[123,1478,1479,1481,1483,1486,1488,1490,1493],{"class":125,"data-line":1001,"line":1001},[123,1480,1241],{"class":182},[123,1482,1006],{"class":129},[123,1484,1485],{"class":167}," key, tc ",[123,1487,320],{"class":129},[123,1489,1014],{"class":129},[123,1491,1492],{"class":167}," testCaseMap ",[123,1494,176],{"class":201},[123,1496,1497,1499,1501,1503,1506,1508,1511,1513,1515,1517,1519,1521,1523,1525,1527,1529],{"class":125,"data-line":1022,"line":1022},[123,1498,1241],{"class":182},[123,1500,1349],{"class":182},[123,1502,360],{"class":167},[123,1504,1505],{"class":133},"Run",[123,1507,154],{"class":366},[123,1509,1510],{"class":167},"key, ",[123,1512,147],{"class":129},[123,1514,154],{"class":153},[123,1516,293],{"class":157},[123,1518,296],{"class":129},[123,1520,274],{"class":133},[123,1522,301],{"class":167},[123,1524,304],{"class":133},[123,1526,164],{"class":153},[123,1528,168],{"class":167},[123,1530,176],{"class":153},[123,1532,1533,1535,1537,1540,1543,1545,1547,1549,1552],{"class":125,"data-line":1049,"line":1049},[123,1534,1241],{"class":182},[123,1536,1241],{"class":182},[123,1538,1539],{"class":182},"  ",[123,1541,1542],{"class":167},"got ",[123,1544,320],{"class":129},[123,1546,150],{"class":133},[123,1548,154],{"class":201},[123,1550,1551],{"class":167},"tc.input",[123,1553,333],{"class":201},[123,1555,1556,1558,1560,1562,1564,1567,1569,1572],{"class":125,"data-line":1088,"line":1088},[123,1557,1241],{"class":182},[123,1559,1241],{"class":182},[123,1561,1539],{"class":182},[123,1563,186],{"class":129},[123,1565,1566],{"class":167}," got ",[123,1568,344],{"class":129},[123,1570,1571],{"class":167}," tc.output ",[123,1573,176],{"class":201},[123,1575,1576,1578,1580,1582,1584,1586,1588,1590,1592,1594,1596,1598,1600,1603],{"class":125,"data-line":1099,"line":1099},[123,1577,1241],{"class":182},[123,1579,1241],{"class":182},[123,1581,1241],{"class":182},[123,1583,168],{"class":182},[123,1585,360],{"class":167},[123,1587,363],{"class":133},[123,1589,154],{"class":366},[123,1591,369],{"class":270},[123,1593,372],{"class":195},[123,1595,375],{"class":270},[123,1597,372],{"class":195},[123,1599,380],{"class":270},[123,1601,1602],{"class":167},", tc.output, got",[123,1604,333],{"class":366},[123,1606,1607,1609,1611,1613,1615],{"class":125,"data-line":1108,"line":1108},[123,1608,1241],{"class":182},[123,1610,1241],{"class":182},[123,1612,1539],{"class":182},[123,1614,119],{"class":167},[123,1616,227],{"class":201},[123,1618,1620,1622,1624,1626,1628],{"class":125,"data-line":1619,"line":1619},17,[123,1621,1241],{"class":182},[123,1623,1349],{"class":182},[123,1625,119],{"class":167},[123,1627,942],{"class":153},[123,1629,333],{"class":366},[123,1631,1633,1635,1637],{"class":125,"data-line":1632,"line":1632},18,[123,1634,1241],{"class":182},[123,1636,119],{"class":167},[123,1638,227],{"class":201},[123,1640,1642],{"class":125,"data-line":1641,"line":1641},19,[123,1643,227],{"class":153},[10,1645,1646,1647,1650],{},"使用",[20,1648,1649],{"code":1649},"t.Run","进行子测试，可以传入key值，从而定位哪个测试用例出错",[114,1652,1654],{"className":432,"code":1653,"language":434,"meta":119,"style":119},"PS D:\\code\\go\\fucking-golang\\go-test> go test -run TestAbs3\n--- FAIL: TestAbs3 (0.00s)\n    --- FAIL: TestAbs3\u002FNo2 (0.00s)\n        abs_test.go:47: expected: -1,get: 1\nFAIL\nexit status 1\nFAIL    go-test 0.545s\n",[20,1655,1656,1677,1692,1715,1736,1740,1748],{"__ignoreMap":119},[123,1657,1658,1660,1662,1664,1666,1668,1670,1672,1674],{"class":125,"data-line":126,"line":126},[123,1659,441],{"class":167},[123,1661,327],{"class":129},[123,1663,446],{"class":167},[123,1665,327],{"class":129},[123,1667,451],{"class":167},[123,1669,454],{"class":129},[123,1671,457],{"class":167},[123,1673,327],{"class":129},[123,1675,1676],{"class":167},"run TestAbs3\n",[123,1678,1679,1681,1684,1686,1688,1690],{"class":125,"data-line":137,"line":137},[123,1680,480],{"class":129},[123,1682,1683],{"class":167}," FAIL: TestAbs3 ",[123,1685,154],{"class":153},[123,1687,488],{"class":195},[123,1689,491],{"class":167},[123,1691,333],{"class":153},[123,1693,1694,1696,1698,1701,1704,1707,1709,1711,1713],{"class":125,"data-line":144,"line":144},[123,1695,1241],{"class":182},[123,1697,480],{"class":129},[123,1699,1700],{"class":167}," FAIL: TestAbs3",[123,1702,1703],{"class":129},"\u002F",[123,1705,1706],{"class":167},"No2 ",[123,1708,154],{"class":153},[123,1710,488],{"class":195},[123,1712,491],{"class":167},[123,1714,333],{"class":153},[123,1716,1717,1719,1721,1723,1726,1728,1730,1732,1734],{"class":125,"data-line":179,"line":179},[123,1718,1241],{"class":182},[123,1720,1241],{"class":182},[123,1722,1244],{"class":167},[123,1724,1725],{"class":195},"47",[123,1727,1250],{"class":167},[123,1729,1253],{"class":195},[123,1731,1256],{"class":129},[123,1733,1259],{"class":167},[123,1735,1262],{"class":195},[123,1737,1738],{"class":125,"data-line":204,"line":204},[123,1739,1267],{"class":167},[123,1741,1742,1744,1746],{"class":125,"data-line":220,"line":220},[123,1743,1272],{"class":129},[123,1745,1275],{"class":167},[123,1747,1262],{"class":195},[123,1749,1750,1752,1754,1756,1758],{"class":125,"data-line":230,"line":230},[123,1751,1282],{"class":167},[123,1753,327],{"class":129},[123,1755,508],{"class":167},[123,1757,488],{"class":195},[123,1759,1760],{"class":167},"545s\n",[1762,1763,1764],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sSDpw, html code.shiki .sSDpw{--shiki-default:#005cc5;--shiki-dark:#79b8ff}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJX2D, html code.shiki .sJX2D{--shiki-default:#e36209;--shiki-dark:#ffab70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sqkie, html code.shiki .sqkie{--shiki-default:#5a32a3;--shiki-dark:#b392f0}",{"title":119,"searchDepth":179,"depth":179,"links":1766},[1767,1768,1773,1774],{"id":35,"depth":137,"text":35},{"id":106,"depth":137,"text":106,"children":1769},[1770,1771,1772],{"id":408,"depth":144,"text":73},{"id":425,"depth":144,"text":426},{"id":516,"depth":144,"text":103},{"id":819,"depth":137,"text":819},{"id":1298,"depth":137,"text":1298},[1776],"Go语言","2025-07-26","介绍 Go 官方 testing 包的基本用法，包括单元测试、表驱动测试、子测试和覆盖率统计。",false,"md",null,{"slots":1783},{},"\u002F2025\u002F07\u002Fgo-test",{"text":1786,"minutes":1787,"time":1788,"words":1789},"3 min read",2.87,172200,574,{"title":5,"description":1778},{"loc":1784},"posts\u002F2025\u002F07\u002Fgo-test",[1794,1795],"Go","单元测试","tech","2025-07-28","WM-m-cACbdDM4GRryyEK7Ig8rbbC0V0e9RNCJVr6asA",[1800,1804],{"title":1801,"path":1802,"stem":1803,"date":1777,"type":1796,"children":-1},"Go Cache 单机缓存使用与原理","\u002F2025\u002F07\u002Fgo-cache","posts\u002F2025\u002F07\u002Fgo-cache",{"title":1805,"path":1806,"stem":1807,"date":1777,"type":1796,"children":-1},"Go Wire 依赖注入实践","\u002F2025\u002F07\u002Fgo-wire","posts\u002F2025\u002F07\u002Fgo-wire",1786555056817]