1. Урок 1. 00:03:13
    1 - What is a test?
  2. Урок 2. 00:09:37
    2 - Why do tests matter?
  3. Урок 3. 00:25:30
    3 - Writing great tests
  4. Урок 4. 00:06:57
    4 - Testing with a main package
  5. Урок 5. 00:08:22
    5 - Testing with Go's testing package
  6. Урок 6. 00:07:03
    6 - What happens when we run go test
  7. Урок 7. 00:05:46
    7 - File naming conventions
  8. Урок 8. 00:04:48
    8 - Function naming conventions
  9. Урок 9. 00:05:53
    9 - Variable naming conventions
  10. Урок 10. 00:08:19
    10 - Ways to signal test failure
  11. Урок 11. 00:17:38
    11 - When to use Error vs Fatal
  12. Урок 12. 00:17:41
    12 - Writing useful failure messages
  13. Урок 13. 00:06:50
    13 - A basic example as a test case
  14. Урок 14. 00:05:49
    14 - Viewing examples in the docs
  15. Урок 15. 00:04:28
    15 - Unordered example output
  16. Урок 16. 00:15:29
    16 - Complex examples
  17. Урок 17. 00:04:20
    17 - Examples in the standard library
  18. Урок 18. 00:10:47
    18 - Table driven tests
  19. Урок 19. 00:05:01
    19 - Generating table driven test code
  20. Урок 20. 00:10:47
    20 - Subtests
  21. Урок 21. 00:13:40
    21 - Shared setup and teardown
  22. Урок 22. 00:10:09
    22 - TestMain
  23. Урок 23. 00:10:10
    23 - Running tests in parallel
  24. Урок 24. 00:04:02
    24 - Parallel subtests
  25. Урок 25. 00:05:02
    25 - Setup and teardown with parallel subtests
  26. Урок 26. 00:12:54
    26 - Gotchas with closures and parallel tests
  27. Урок 27. 00:08:33
    27 - What is a race condition?
  28. Урок 28. 00:06:10
    28 - The race detection flag
  29. Урок 29. 00:20:38
    29 - Testing explicitly for race conditions
  30. Урок 30. 00:07:45
    30 - Simple comparisons
  31. Урок 31. 00:03:11
    31 - Reflect's DeepEqual function
  32. Урок 32. 00:02:59
    32 - Golden files (brief overview)
  33. Урок 33. 00:22:38
    33 - Helper comparison functions
  34. Урок 34. 00:18:53
    34 - Building things with helper functions
  35. Урок 35. 00:04:50
    35 - Generating test data
  36. Урок 36. 00:05:56
    36 - Go's testing/quick package
  37. Урок 37. 00:09:36
    37 - Public testing utilities
  38. Урок 38. 00:05:29
    38 - Running specific tests
  39. Урок 39. 00:04:41
    39 - Running tests for subpackages
  40. Урок 40. 00:03:06
    40 - Skipping tests
  41. Урок 41. 00:04:02
    41 - Custom flags
  42. Урок 42. 00:05:26
    42 - Build tags
  43. Урок 43. 00:22:40
    43 - Benchmarks
  44. Урок 44. 00:02:22
    44 - Verbose testing
  45. Урок 45. 00:17:01
    45 - Code coverage
  46. Урок 46. 00:04:19
    46 - The timeout flag
  47. Урок 47. 00:11:00
    47 - Parallel testing flags
  48. Урок 48. 00:06:36
    48 - Differences between external and internal tests
  49. Урок 49. 00:06:15
    49 - How to write internal and external tests
  50. Урок 50. 00:09:40
    50 - When to use external tests
  51. Урок 51. 00:09:44
    51 - Exporting unexported vars, funcs, and types
  52. Урок 52. 00:08:14
    52 - When to use internal tests
  53. Урок 53. 00:05:03
    53 - Overview of test types
  54. Урок 54. 00:01:50
    54 - Unit tests
  55. Урок 55. 00:09:15
    55 - Integration tests
  56. Урок 56. 00:06:35
    56 - End-to-end tests
  57. Урок 57. 00:09:51
    57 - Which test type should I use?
  58. Урок 58. 00:09:23
    58 - What is global state?
  59. Урок 59. 00:06:48
    59 - Testing with global state (if you must)
  60. Урок 60. 00:04:44
    60 - What is dependency injection (DI)?
  61. Урок 61. 00:09:21
    61 - DI enables implementation agnostic code
  62. Урок 62. 00:12:08
    62 - DI makes testing easier
  63. Урок 63. 00:10:58
    63 - DI and useful zero values
  64. Урок 64. 00:08:16
    64 - Removing global state with DI
  65. Урок 65. 00:14:19
    65 - Package level functions
  66. Урок 66. 00:11:15
    66 - Summary of dependency injection
  67. Урок 67. 00:05:52
    67 - What is mocking?
  68. Урок 68. 00:10:34
    68 - Types of mock objects
  69. Урок 69. 00:12:44
    69 - Why do we mock?
  70. Урок 70. 00:05:08
    70 - Third party packages
  71. Урок 71. 00:15:57
    71 - Faking APIs
  72. Урок 72. 00:14:14
    72 - What are interface test suites?
  73. Урок 73. 00:08:44
    73 - Interface test suite setup and teardown
  74. Урок 74. 00:06:24
    74 - Interface test suites in the wild
  75. Урок 75. 00:11:29
    75 - httptest.ResponseRecorder
  76. Урок 76. 00:04:47
    76 - httptest.Server
  77. Урок 77. 00:18:51
    77 - Building HTTP helpers
  78. Урок 78. 00:10:19
    78 - What are golden files?
  79. Урок 79. 00:04:25
    79 - Updating golden files
  80. Урок 80. 00:04:06
    80 - What is a subprocess?
  81. Урок 81. 00:07:44
    81 - Running the subprocess in tests
  82. Урок 82. 00:05:58
    82 - Mocking simple subprocesses
  83. Урок 83. 00:24:06
    83 - Mocking complex subprocesses
  84. Урок 84. 00:07:08
    84 - Why are dates and times problematic?
  85. Урок 85. 00:16:12
    85 - Inject your time and sleep functions
  86. Урок 86. 00:14:45
    86 - Testing timeouts
  87. Урок 87. 00:03:22
    87 - Colorizing your terminal output
  88. Урок 88. 00:01:31
    88 - Coverage info function
  89. Урок 89. 00:06:28
    1 - Topics covered in the form project
  90. Урок 90. 00:11:33
    2 - The first test
  91. Урок 91. 00:05:10
    3 - Our first bug
  92. Урок 92. 00:05:54
    4 - Handling multiple fields
  93. Урок 93. 00:07:53
    5 - Field values
  94. Урок 94. 00:18:52
    6 - Checking for specific attributes in a test
  95. Урок 95. 00:05:11
    7 - Unexported fields
  96. Урок 96. 00:08:52
    8 - Non-structs are invalid
  97. Урок 97. 00:03:51
    9 - Pointers to structs
  98. Урок 98. 00:16:52
    10 - Supporting more types
  99. Урок 99. 00:17:36
    11 - Generating HTML
  100. Урок 100. 00:17:19
    12 - Discussing struct tags and tests
  101. Урок 101. 00:25:23
    13 - Parsing struct tags
  102. Урок 102. 00:26:50
    14 - Applying struct tags
  103. Урок 103. 00:16:02
    15 - Golden test files
  104. Урок 104. 00:08:00
    16 - Struct tag tests in TestHTML
  105. Урок 105. 00:19:29
    17 - Rendering errors: adding a test
  106. Урок 106. 00:06:22
    18 - Rendering errors: implementing
  107. Урок 107. 00:09:56
    19 - Detecting breaking changes with tests
  108. Урок 108. 00:12:41
    1 - The first test
  109. Урок 109. 00:09:25
    2 - Creating a customer
  110. Урок 110. 00:02:26
    3 - Versioning our client
  111. Урок 111. 00:02:37
    4 - Making the API key a flag
  112. Урок 112. 00:04:46
    5 - Improving our customer data
  113. Урок 113. 00:15:33
    6 - The charge endpoint
  114. Урок 114. 00:23:15
    7 - Custom error type
  115. Урок 115. 00:20:01
    8 - Parsing stripe errors
  116. Урок 116. 00:14:58
    9 - Customer endpoint errors
  117. Урок 117. 00:11:06
    10 - Starting on unit tests
  118. Урок 118. 00:14:40
    11 - Allowing custom http clients
  119. Урок 119. 00:23:24
    12 - Creating a recorder client
  120. Урок 120. 00:12:02
    13 - Persisting recorded responses
  121. Урок 121. 00:02:24
    14 - Making our tests cross-platform
  122. Урок 122. 00:12:54
    15 - Serving recorded responses
  123. Урок 123. 00:09:53
    16 - Unique customer per charge subtest
  124. Урок 124. 00:10:40
    17 - Adding tests for specific errors
  125. Урок 125. 00:12:56
    18 - Helper functions
  126. Урок 126. 00:15:02
    1 - What to expect
  127. Урок 127. 00:12:43
    2 - App overview
  128. Урок 128. 00:14:42
    3 - Initial db tests
  129. Урок 129. 00:12:18
    4 - Creating the db.Open function
  130. Урок 130. 00:07:09
    5 - What about mocks
  131. Урок 131. 00:23:02
    6 - Test harnesses and helpers
  132. Урок 132. 00:22:33
    7 - Reviewing tests
  133. Урок 133. 00:05:21
    8 - Testing specific times
  134. Урок 134. 00:12:04
    9 - First pass at refactoring the db pkg
  135. Урок 135. 00:32:31
    10 - Updating db tests
  136. Урок 136. 01:03:07
    11 - Testing the order flow
  137. Урок 137. 00:17:03
    12 - Extracting code for unit testing
  138. Урок 138. 00:16:15
    13 - Extracting the active campaign handler
  139. Урок 139. 00:26:06
    14 - Unit testing the active campaign handler
  140. Урок 140. 00:24:22
    15 - Table driven testing the active campaign handler
  141. Урок 141. 00:12:36
    16 - Refactoring campaign middleware
  142. Урок 142. 00:21:42
    17 - Unit testing the campaign middleware
  143. Урок 143. 00:06:53
    18 - Starting the orders handler
  144. Урок 144. 00:18:23
    19 - Testing the new order handler
  145. Урок 145. 00:09:44
    20 - Refactor Create order handler
  146. Урок 146. 00:20:00
    21 - Test: Create order handler
  147. Урок 147. 00:15:20
    22 - Integration testing with Stripe
  148. Урок 148. 00:07:25
    23 - Testing for specific Stripe failures
  149. Урок 149. 00:31:08
    24 - Another form of table driven tests
  150. Урок 150. 00:04:03
    25 - Refactor: Order middleware
  151. Урок 151. 00:06:08
    26 - Test: Order middleware
  152. Урок 152. 00:06:36
    27 - Refactor: Show order handler
  153. Урок 153. 00:33:32
    28 - Test: Show order handler
  154. Урок 154. 00:10:21
    29 - Don't get too clever
  155. Урок 155. 00:12:41
    30 - Integration testing the show order handler
  156. Урок 156. 00:09:40
    31 - Removing sql from the confirm order handler
  157. Урок 157. 00:12:53
    32 - Testing the database confirm order function
  158. Урок 158. 00:04:41
    33 - Refactor: Confirm order handler
  159. Урок 159. 00:14:34
    34 - Test: Confirm order handler with same address
  160. Урок 160. 00:06:40
    35 - Test: Confirm order handler when campaign isnt found
  161. Урок 161. 00:29:01
    36 - Refactoring and finishing the confirm order handler unit tests
  162. Урок 162. 00:15:32
    37 - Integration test: Confirm order handler
  163. Урок 163. 00:06:07
    38 - Setting the stripe secret key via ENV variable
  164. Урок 164. 00:13:05
    39 - Refactoring the routing code in main
  165. Урок 165. 00:11:33
    40 - Testing our asset directory
  166. Урок 166. 00:09:18
    41 - Mocks for testing our router
  167. Урок 167. 00:10:06
    42 - Testing the show order route
  168. Урок 168. 00:08:14
    43 - Table driven router testing
  169. Урок 169. 00:07:05
    44 - Additional router testing
  170. Урок 170. 00:16:18
    45 - Removing the tempDB type
  171. Урок 171. 00:22:27
    46 - Removing the DefaultDatabase package variable
  172. Урок 172. 00:10:27
    47 - Cleanup
  173. Урок 173. 00:08:58
    48 - Wrapping up