TAµÄÿÈÕÐÄÇé | ²Áº¹ Ç°Ìì 09:02 |
---|
Ç©µ½ÌìÊý: 1042 Ìì Á¬ÐøÇ©µ½: 4 Ìì [LV.10]²âÊÔ×Ü˾Áî
|
¡¡¡¡ÔÚ²âÊÔÖÐʹÓÃÍⲿÊý¾Ý
¡¡¡¡ÔÚGoÖУ¬ÄãÓ¦¸Ã°Ñ²âÊÔµÄÍⲿÊý¾Ý·ÅÔÚÒ»¸ö½Ð×ötestdata µÄĿ¼ÖС£µ±ÄãΪÄãµÄ³ÌÐò¹¹½¨¶þ½øÖÆÎļþʱ£¬testdata Ŀ¼»á±»ºöÂÔ£¬ËùÒÔÄã¿ÉÒÔʹÓÃÕâÖÖ·½·¨À´´æ´¢ÄãÏë²âÊÔ³ÌÐòµÄÊäÈë¡£
¡¡¡¡ÀýÈ磬ÈÃÎÒÃÇдһ¸öº¯Êý£¬´ÓÒ»¸ö¶þ½øÖÆÎļþÉú³Ébase64 ±àÂë¡£
- func getBase64Encoding(b []byte) string {
- ¡¡¡¡ return base64.StdEncoding.EncodeToString(b)
- ¡¡¡¡}
¸´ÖÆ´úÂë ¡¡ÎªÁ˲âÊÔÕâ¸öº¯Êý²úÉúÕýÈ·µÄÊä³ö£¬ÈÃÎÒÃÇ°ÑһЩÑù±¾ÎļþºÍËüÃÇÏàÓ¦µÄbase64 ±àÂë·ÅÔÚÎÒÃÇÏîÄ¿¸ù²¿µÄtestdata Ŀ¼Ï¡£
- ¡¡$ ls testdata
- ¡¡¡¡img1.jpg img1_base64.txt img2.jpg img2_base64.txt img3.jpg img3_base64.txt
¸´ÖÆ´úÂë ΪÁ˲âÊÔÎÒÃǵÄgetBase64Encoding() ¹¦ÄÜ£¬ÔËÐÐÏÂÃæµÄ´úÂë¡£
- func TestGetBase64Encoding(t *testing.T) {
- ¡¡¡¡ cases := []string{"img1", "img2", "img3"}
- ¡¡¡¡ for _, v := range cases {
- ¡¡¡¡ t.Run(v, func(t *testing.T) {
- ¡¡¡¡ b, err := os.ReadFile(filepath.Join("testdata", v+".jpg"))
- ¡¡¡¡ if err != nil {
- ¡¡¡¡ t.Fatal(err)
- ¡¡¡¡ }
- ¡¡¡¡ expected, err := os.ReadFile(filepath.Join("testdata", v+"_base64.txt"))
- ¡¡¡¡ if err != nil {
- ¡¡¡¡ t.Fatal(err)
- ¡¡¡¡ }
- ¡¡¡¡ got := getBase64Encoding(b)
- ¡¡¡¡ if string(expected) != got {
- ¡¡¡¡ t.Fatalf("Expected output to be: '%s', but got: '%s'", string(expected), got)
- ¡¡¡¡ }
- ¡¡¡¡ })
- ¡¡¡¡ }
- ¡¡¡¡}
¸´ÖÆ´úÂë ¡¡´ÓÎļþϵͳÖжÁȡÿ¸öÑù±¾ÎļþµÄ×Ö½Ú£¬È»ºóËÍÈëgetBase64Encoding() º¯Êý¡£Ëæºó½«Êä³öÓëÔ¤ÆÚÊä³ö½øÐбȽϣ¬Ô¤ÆÚÊä³öÒ²ÊÇ´Ótestdata Ŀ¼ÖлñÈ¡µÄ¡£
¡¡¡¡ÈÃÎÒÃÇͨ¹ýÔÚtestdata Öд´½¨Ò»¸ö×ÓĿ¼£¬Ê¹²âÊÔ¸üÈÝÒ×ά»¤¡£ÔÚÎÒÃǵÄ×ÓĿ¼ÖУ¬ÎÒÃǽ«Ìí¼ÓËùÓеÄÊäÈëÎļþ£¬ÔÊÐíÎÒÃǼòµ¥µØµü´úÿ¸ö¶þ½øÖÆÎļþ£¬²¢±È½Ïʵ¼ÊÊä³öºÍÔ¤ÆÚÊä³ö¡£
¡¡¡¡ÏÖÔÚ£¬ÎÒÃÇ¿ÉÒÔÌí¼Ó¸ü¶àµÄ²âÊÔ°¸Àý£¬¶ø²»ÐèÒª½Ó´¥Ô´´úÂë¡£
- ¡¡$ go test -v
- ¡¡¡¡=== RUN TestGetBase64Encoding
- ¡¡¡¡=== RUN TestGetBase64Encoding/img1
- ¡¡¡¡=== RUN TestGetBase64Encoding/img2
- ¡¡¡¡=== RUN TestGetBase64Encoding/img3
- ¡¡¡¡--- PASS: TestGetBase64Encoding (0.04s)
- ¡¡¡¡ --- PASS: TestGetBase64Encoding/img1 (0.01s)
- ¡¡¡¡ --- PASS: TestGetBase64Encoding/img2 (0.01s)
- ¡¡¡¡ --- PASS: TestGetBase64Encoding/img3 (0.01s)
- ¡¡¡¡PASS
- ¡¡¡¡ok github.com/ayoisaiah/random 0.044s
¸´ÖÆ´úÂë ¡¡Ê¹ÓûƽðÎļþ
¡¡¡¡Èç¹ûÄãÔÚʹÓÃGoÄ£°å£¬×îºÃÊDzâÊÔÒ»ÏÂÉú³ÉµÄÊä³öÓëÔ¤ÆÚµÄÊä³ö£¬ÒÔÈ·ÈÏÄ£°åÊÇ·ñ°´Ô¤ÆÚ¹¤×÷¡£GoÄ£°åͨ³£±È½Ï´ó£¬ËùÒÔ²»½¨ÒéÏñÎÒÃÇÔÚ±¾½Ì³ÌÖÐÆù½ñΪֹËù×öµÄÄÇÑùÔÚÔ´´úÂëÖÐÓ²±àÂëÔ¤ÆÚÊä³ö¡£
¡¡¡¡ÈÃÎÒÃÇÀ´Ì½ÌÖÒ»ÏÂGoÄ£°åµÄÁíÒ»ÖÖ·½·¨£¬Ëü¿ÉÒÔÔÚÏîÄ¿µÄÕû¸öÉúÃüÖÜÆÚÄÚ¼ò»¯²âÊԵıàдºÍά»¤¡£
¡¡¡¡»Æ½ðÎļþÊÇÒ»ÖÖÌØÊâÀàÐ͵ÄÎļþ£¬°üº¬²âÊÔµÄÔ¤ÆÚÊä³ö¡£²âÊÔº¯Êý´Ó»Æ½ðÎļþÖжÁÈ¡£¬½«ÆäÄÚÈÝÓë²âÊÔµÄÔ¤ÆÚÊä³ö½øÐбȽϡ£
¡¡¡¡ÔÚÏÂÃæµÄÀý×ÓÖУ¬ÎÒÃǽ«Ê¹ÓÃhtml/template £¬Éú³ÉÒ»¸öHTML±í¸ñ£¬ÆäÖаüº¬¿â´æÖÐÿ±¾ÊéµÄÒ»ÐС£
- ¡¡¡¡type Book struct {
- ¡¡¡¡ Name string
- ¡¡¡¡ Author string
- ¡¡¡¡ Publisher string
- ¡¡¡¡ Pages int
- ¡¡¡¡ PublishedYear int
- ¡¡¡¡ Price int
- ¡¡¡¡}
- ¡¡¡¡var tmpl = `<table class="table">
- ¡¡¡¡ <thead>
- ¡¡¡¡ <tr>
- ¡¡¡¡ <th>Name</th>
- ¡¡¡¡ <th>Author</th>
- ¡¡¡¡ <th>Publisher</th>
- ¡¡¡¡ <th>Pages</th>
- ¡¡¡¡ <th>Year</th>
- ¡¡¡¡ <th>Price</th>
- ¡¡¡¡ </tr>
- ¡¡¡¡ </thead>
- ¡¡¡¡ <tbody>
- ¡¡¡¡ {{ range . }}<tr>
- ¡¡¡¡ <td>{{ .Name }}</td>
- ¡¡¡¡ <td>{{ .Author }}</td>
- ¡¡¡¡ <td>{{ .Publisher }}</td>
- ¡¡¡¡ <td>{{ .Pages }}</td>
- ¡¡¡¡ <td>{{ .PublishedYear }}</td>
- ¡¡¡¡ <td>${{ .Price }}</td>
- ¡¡¡¡ </tr>{{ end }}
- ¡¡¡¡ </tbody>
- ¡¡¡¡</table>
- ¡¡¡¡`
- ¡¡¡¡var tpl = template.Must(template.New("table").Parse(tmpl))
- ¡¡¡¡func generateTable(books []Book, w io.Writer) error {
- ¡¡¡¡ return tpl.Execute(w, books)
- ¡¡¡¡}
- ¡¡¡¡func main() {
- ¡¡¡¡ books := []Book{
- ¡¡¡¡ {
- ¡¡¡¡ Name: "The Odessa File",
- ¡¡¡¡ Author: "Frederick Forsyth",
- ¡¡¡¡ Pages: 334,
- ¡¡¡¡ PublishedYear: 1979,
- ¡¡¡¡ Publisher: "Bantam",
- ¡¡¡¡ Price: 15,
- ¡¡¡¡ },
- ¡¡¡¡ }
- ¡¡¡¡ err := generateTable(books, os.Stdout)
- ¡¡¡¡ if err != nil {
- ¡¡¡¡ log.Fatal(err)
- ¡¡¡¡ }
- ¡¡¡¡}
¸´ÖÆ´úÂë ÉÏÃæµÄgenerateTable() º¯Êý´ÓBook ¶ÔÏóµÄƬ¶ÏÖд´½¨HTML±í¡£ÉÏÃæµÄ´úÂ뽫²úÉúÒÔÏÂÊä³ö¡£
- ¡¡$ go run main.go
- ¡¡¡¡<table class="table">
- ¡¡¡¡ <thead>
- ¡¡¡¡ <tr>
- ¡¡¡¡ <th>Name</th>
- ¡¡¡¡ <th>Author</th>
- ¡¡¡¡ <th>Publisher</th>
- ¡¡¡¡ <th>Pages</th>
- ¡¡¡¡ <th>Year</th>
- ¡¡¡¡ <th>Price</th>
- ¡¡¡¡ </tr>
- ¡¡¡¡ </thead>
- ¡¡¡¡ <tbody>
- ¡¡¡¡ <tr>
- ¡¡¡¡ <td>The Odessa File</td>
- ¡¡¡¡ <td>Frederick Forsyth</td>
- ¡¡¡¡ <td>Bantam</td>
- ¡¡¡¡ <td>334</td>
- ¡¡¡¡ <td>1979</td>
- ¡¡¡¡ <td>$15</td>
- ¡¡¡¡ </tr>
- ¡¡¡¡ </tbody>
- ¡¡¡¡</table>
¸´ÖÆ´úÂë ¡¡ÎªÁ˲âÊÔÉÏÃæµÄº¯Êý£¬ÎÒÃǽ«²¶»ñʵ¼Ê½á¹û²¢ÓëÔ¤ÆÚ½á¹û½øÐбȽϡ£ÎÒÃǽ«ÏñÉÏÒ»½ÚÄÇÑù°ÑÔ¤ÆÚ½á¹û´æ´¢ÔÚtestdata Ŀ¼ÖУ¬È»¶ø£¬ÎÒÃDZØÐë×öһЩ¸Ä±ä¡£
¡¡¡¡¼ÙÉèÎÒÃÇÔÚÒ»¸ö¿â´æÖÐÓµÓÐÒÔϵÄÊé¼®ÁÐ±í¡£
- var inventory = []Book{
- ¡¡¡¡ {
- ¡¡¡¡ Name: "The Solitare Mystery",
- ¡¡¡¡ Author: "Jostein Gaarder",
- ¡¡¡¡ Publisher: "Farrar Straus Giroux",
- ¡¡¡¡ Pages: 351,
- ¡¡¡¡ PublishedYear: 1990,
- ¡¡¡¡ Price: 12,
- ¡¡¡¡ },
- ¡¡¡¡ {
- ¡¡¡¡ Name: "Also Known As",
- ¡¡¡¡ Author: "Robin Benway",
- ¡¡¡¡ Publisher: "Walker Books",
- ¡¡¡¡ Pages: 208,
- ¡¡¡¡ PublishedYear: 2013,
- ¡¡¡¡ Price: 10,
- ¡¡¡¡ },
- ¡¡¡¡ {
- ¡¡¡¡ Name: "Ego Is the Enemy",
- ¡¡¡¡ Author: "Ryan Holiday",
- ¡¡¡¡ Publisher: "Portfolio",
- ¡¡¡¡ Pages: 226,
- ¡¡¡¡ PublishedYear: 2016,
- ¡¡¡¡ Price: 18,
- ¡¡¡¡ },
- ¡¡¡¡}
¸´ÖÆ´úÂë Õâ¸öͼÊéÇåµ¥µÄÔ¤ÆÚÊä³ö½«¿çÔ½Ðí¶àÐУ¬Òò´Ë£¬ºÜÄѽ«Æä×÷Ϊһ¸ö×Ö·û´®×ÖÃæ·ÅÔÚÔ´´úÂëÄÚ¡£
- <table class="table">
- ¡¡¡¡ <thead>
- ¡¡¡¡ <tr>
- ¡¡¡¡ <th>Name</th>
- ¡¡¡¡ <th>Author</th>
- ¡¡¡¡ <th>Publisher</th>
- ¡¡¡¡ <th>Pages</th>
- ¡¡¡¡ <th>Year</th>
- ¡¡¡¡ <th>Price</th>
- ¡¡¡¡ </tr>
- ¡¡¡¡ </thead>
- ¡¡¡¡ <tbody>
- ¡¡¡¡ <tr>
- ¡¡¡¡ <td>The Solitaire Mystery</td>
- ¡¡¡¡ <td>Jostein Gaarder</td>
- ¡¡¡¡ <td>Farrar Straus Giroux</td>
- ¡¡¡¡ <td>351</td>
- ¡¡¡¡ <td>1990</td>
- ¡¡¡¡ <td>$12</td>
- ¡¡¡¡ </tr>
- ¡¡¡¡ <tr>
- ¡¡¡¡ <td>Also Known As</td>
- ¡¡¡¡ <td>Robin Benway</td>
- ¡¡¡¡ <td>Walker Books</td>
- ¡¡¡¡ <td>308</td>
- ¡¡¡¡ <td>2013</td>
- ¡¡¡¡ <td>$10</td>
- ¡¡¡¡ </tr>
- ¡¡¡¡ <tr>
- ¡¡¡¡ <td>Ego Is The Enemy</td>
- ¡¡¡¡ <td>Ryan Holiday</td>
- ¡¡¡¡ <td>Portfolio</td>
- ¡¡¡¡ <td>226</td>
- ¡¡¡¡ <td>2016</td>
- ¡¡¡¡ <td>$18</td>
- ¡¡¡¡ </tr>
- ¡¡¡¡ </tbody>
- ¡¡¡¡</table>
¸´ÖÆ´úÂë ³ýÁ˶ԽϴóµÄÊä³öʵÓÃÍ⣬һ¸ö»Æ½ðÎļþ¿ÉÒÔ×Ô¶¯¸üкÍÉú³É¡£
¡¡¡¡ËäÈ»¿ÉÒÔдһ¸ö¸¨Öúº¯ÊýÀ´´´½¨ºÍ¸üлƽðÎļþ£¬µ«ÎÒÃÇ¿ÉÒÔÀûÓÃgoldie£¬Ò»¸öרÃÅΪ»Æ½ðÎļþ´´½¨µÄ¹¤¾ß¡£
¡¡¡¡ÓÃÏÂÃæµÄÃüÁî°²×°×îа汾µÄgoldie¡£
- ¡¡$ go get -u github.com/sebdah/goldie/v2
¸´ÖÆ´úÂë ÈÃÎÒÃǼÌÐøʹÓÃgoldieÀ´²âÊÔgenerateTable() º¯Êý¡£
- ¡¡func TestGenerateTable(t *testing.T) {
- ¡¡¡¡ var buf bytes.Buffer
- ¡¡¡¡ err := generateTable(inventory, &buf)
- ¡¡¡¡ if err != nil {
- ¡¡¡¡ t.Fatal(err)
- ¡¡¡¡ }
- ¡¡¡¡ actual := buf.Bytes()
- ¡¡¡¡ g := goldie.New(t)
- ¡¡¡¡ g.Assert(t, "books", actual)
- ¡¡¡¡}
¸´ÖÆ´úÂë ¡¡¡¡ÉÏÃæµÄ²âÊÔÔÚÒ»¸ö×ֽڵĻº³åÇøÖⶻñÁËgenerateTable() º¯ÊýµÄÊä³ö¡£È»ºó£¬Ëü½«»º³åÇøµÄÄÚÈÝ´«µÝ¸øgoldie ʵÀýµÄAssert() ·½·¨¡£»º³åÇøÖеÄÄÚÈݽ«Óëtestdata Ŀ¼ÖеÄbooks.golden ÎļþµÄÄÚÈݽøÐбȽϡ£
¡¡¡¡×î³õ£¬ÔËÐиòâÊÔ»áʧ°Ü£¬ÒòΪÎÒÃÇ»¹Ã»Óд´½¨books.golden Îļþ¡£
- $ go test -v
- ¡¡¡¡=== RUN TestGenerateTable
- ¡¡¡¡ main_test.go:48: Golden fixture not found. Try running with -update flag.
- ¡¡¡¡--- FAIL: TestGenerateTable (0.00s)
- ¡¡¡¡FAIL
- ¡¡¡¡exit status 1
- ¡¡¡¡FAIL github.com/ayoisaiah/random 0.006s
¸´ÖÆ´úÂë ´íÎóÐÅÏ¢½¨ÒéÎÒÃÇÌí¼Ó-update ±êÖ¾£¬Õ⽫Óûº³åÇøµÄÄÚÈÝ´´½¨books.golden Îļþ¡£
- $ go test -v -update
- ¡¡¡¡=== RUN TestGenerateTable
- ¡¡¡¡--- PASS: TestGenerateTable (0.00s)
- ¡¡¡¡PASS
- ¡¡¡¡ok github.com/ayoisaiah/random 0.006s
¸´ÖÆ´úÂë ÔÚËæºóµÄÔËÐÐÖУ¬ÎÒÃÇÓ¦¸Ãɾ³ý-update ±êÖ¾£¬ÕâÑùÎÒÃǵĻƽðÎļþ¾Í²»»á±»²»¶ÏµØ¸üС£
¡¡¡¡¶ÔÄ£°åµÄÈκθı䶼»áµ¼Ö²âÊÔʧ°Ü¡£ÀýÈ磬Èç¹ûÄ㽫¼Û¸ñ×ֶθüÐÂΪŷԪ¶ø²»ÊÇÃÀÔª£¬Äã»áÁ¢¼´ÊÕµ½Ò»¸ö´íÎó¡£ÕâЩ´íÎóµÄ·¢ÉúÊÇÒòΪgenerateTable() º¯ÊýµÄÊä³ö²»ÔÙ·ûºÏ»Æ½ðÎļþµÄÄÚÈÝ¡£
¡¡¡¡GoldieÌṩÁ˲îÒ칦ÄÜ£¬ÒÔ°ïÖúÄãÔÚÕâЩ´íÎó·¢Éúʱ·¢Ïֱ仯¡£
- $ go test -v
- ¡¡¡¡=== RUN TestGenerateTable
- ¡¡¡¡ main_test.go:48: Result did not match the golden fixture. Diff is below:
- ¡¡¡¡ --- Expected
- ¡¡¡¡ +++ Actual
- ¡¡¡¡ [url=home.php?mod=space&uid=40658]@@[/url] -18,3 +18,3 @@
- ¡¡¡¡ <td>1990</td>
- ¡¡¡¡ - <td>$12</td>
- ¡¡¡¡ + <td>€12</td>
- ¡¡¡¡ </tr><tr>
- ¡¡¡¡ @@ -25,3 +25,3 @@
- ¡¡¡¡ <td>2013</td>
- ¡¡¡¡ - <td>$10</td>
- ¡¡¡¡ + <td>€10</td>
- ¡¡¡¡ </tr><tr>
- ¡¡¡¡ @@ -32,3 +32,3 @@
- ¡¡¡¡ <td>2016</td>
- ¡¡¡¡ - <td>$18</td>
- ¡¡¡¡ + <td>€18</td>
- ¡¡¡¡ </tr>
- ¡¡¡¡--- FAIL: TestGenerateTable (0.00s)
- ¡¡¡¡FAIL
- ¡¡¡¡exit status 1
- ¡¡¡¡FAIL github.com/ayoisaiah/random 0.007s
¸´ÖÆ´úÂë ÔÚÉÏÃæµÄÊä³öÖУ¬¸Ã±ä»¯±»Çå³þµØÍ»³öÏÔʾ¡£ÕâЩ±ä»¯ÊǹÊÒâµÄ£¬ËùÒÔÎÒÃÇ¿ÉÒÔͨ¹ýʹÓÃ-update ±êÖ¾¸üлƽðÎļþ£¬Ê¹ÎÒÃǵIJâÊÔÔÙ´Îͨ¹ý¡£
- ¡¡$ go test -v -update
- ¡¡¡¡=== RUN TestGenerateTable
- ¡¡¡¡--- PASS: TestGenerateTable (0.00s)
- ¡¡¡¡PASS
- ¡¡¡¡ok github.com/ayoisaiah/random 0.006s
¸´ÖÆ´úÂë ½áÂÛ
¡¡¡¡ÔÚ±¾½Ì³ÌÖУ¬ÎÒÃÇÑо¿ÁËGoÖеÄһЩ¸ß¼¶²âÊÔ¼¼Êõ¡£Ê×ÏÈ£¬ÎÒÃÇÉîÈëÑо¿ÁËÎÒÃǵÄHTTP°ü£¬²¢Ñ§Ï°ÁËÈçºÎÓÃ×Ô¶¨Òå½Ó¿ÚÄ£ÄâÎÒÃǵÄHTTP¿Í»§¶Ë¡£È»ºó£¬ÎÒÃǻعËÁËÈçºÎÔÚ²âÊÔÖÐʹÓÃÍⲿÊý¾Ý²¢Ê¹ÓÃgoldie´´½¨»Æ½ðÎļþ¡£
|
|