Testing package overview in Go - Time & Space Complexity
When using Go's testing package, it's important to know how the time your tests take grows as you add more tests or more data.
We want to understand how the testing process scales with the size of the input or number of tests.
Analyze the time complexity of the following test function using Go's testing package.
func TestSum(t *testing.T) {
for i := 0; i < len(testCases); i++ {
got := Sum(testCases[i].input)
if got != testCases[i].expected {
t.Errorf("Sum(%v) = %v; want %v", testCases[i].input, got, testCases[i].expected)
}
}
}
This code runs a test for each input in a list, checking if the Sum function returns the expected result.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Looping through all test cases to run each test.
- How many times: Once for each test case in the testCases slice.
As the number of test cases increases, the total time to run tests grows proportionally.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | Runs 10 tests |
| 100 | Runs 100 tests |
| 1000 | Runs 1000 tests |
Pattern observation: The time grows linearly as you add more test cases.
Time Complexity: O(n)
This means the time to run tests increases directly with the number of test cases.
[X] Wrong: "Adding more test cases won't affect test run time much."
[OK] Correct: Each test case runs separately, so more tests mean more time spent running them all.
Understanding how test time grows helps you write efficient tests and manage testing time well in real projects.
"What if each test case called another function that itself loops over data? How would the time complexity change?"