51TestingÈí¼þ²âÊÔÂÛ̳

±êÌâ: GoÖеĸ߼¶µ¥Ôª²âÊÔģʽ£¨Ï£© [´òÓ¡±¾Ò³]

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












»¶Ó­¹âÁÙ 51TestingÈí¼þ²âÊÔÂÛ̳ (http://bbs.51testing.com/) Powered by Discuz! X3.2