📖 Scenario: You are building a simple calculator function in Go. You will write the function step-by-step using test-driven development (TDD). This means you will first write tests that describe what the function should do, then write the function code to pass those tests.
🎯 Goal: Create a Go function called Add that takes two integers and returns their sum. You will write tests first, then write the function to pass those tests.
📋 What You'll Learn
Create a test function called TestAdd in a file named main_test.go.
Write a test case inside TestAdd that checks if Add(2, 3) returns 5.
Create the Add function in main.go that takes two int parameters and returns their sum.
Run the test to confirm it passes and print the result.
💡 Why This Matters
🌍 Real World
Writing tests before code helps catch mistakes early and ensures your code works as expected.
💼 Career
Test-driven development (TDD) is a common practice in software engineering jobs to improve code quality and reliability.
Progress0 / 4 steps
1
Write the test function
Create a test function called TestAdd in main_test.go. Inside it, use t.Errorf to fail the test with the message "Test not implemented". This sets up the test file.
Go
Hint
Remember to import the testing package and define TestAdd with t *testing.T parameter.
2
Write the test case for Add(2, 3)
In TestAdd, write a test case that calls Add(2, 3) and checks if the result equals 5. Use if and t.Errorf to report failure with message "Add(2, 3) = %d; want 5".
Go
Hint
Call Add(2, 3) and compare the result to 5. Use t.Errorf to show an error if they don't match.
3
Write the Add function
Create the Add function in main.go. It should take two int parameters named a and b, and return their sum as an int.
Go
Hint
Define Add with two int inputs and return their sum.
4
Run the test and print success message
Run the test using go test. Then add a main function in main.go that calls Add(2, 3) and prints the result using fmt.Println.
Go
Hint
Use fmt.Println to print the result of Add(2, 3) in main.
Practice
(1/5)
1. What is the main purpose of writing tests in Go using the testing package?
easy
A. To make the program run faster
B. To add comments to the code
C. To check if the code works correctly by running test functions
D. To create user interfaces
Solution
Step 1: Understand the role of tests in Go
Tests are written to verify that the code behaves as expected.
Step 2: Identify what the testing package does
The testing package provides tools to write and run tests that check code correctness.
Final Answer:
To check if the code works correctly by running test functions -> Option C
Quick Check:
Tests check code correctness = B [OK]
Hint: Tests verify code correctness before running fully [OK]
Common Mistakes:
Thinking tests improve speed
Confusing tests with comments
Assuming tests create UI
2. Which of the following is the correct way to start a test function in Go?
easy
A. func testMyFunc(t *testing.T) {}
B. func MyFuncTest(t *testing.T) {}
C. func TestingMyFunc(t *testing.T) {}
D. func TestMyFunc(t *testing.T) {}
Solution
Step 1: Recall Go test function naming rules
Test functions must start with "Test" and take a *testing.T parameter.
Step 2: Match the correct function signature
Only func TestMyFunc(t *testing.T) {} follows this rule exactly.
Final Answer:
func TestMyFunc(t *testing.T) {} -> Option D
Quick Check:
Test functions start with "Test" = C [OK]
Hint: Test functions must start with uppercase 'Test' [OK]
Common Mistakes:
Starting function name with lowercase 'test'
Adding extra words before 'Test'
Using wrong parameter types
3. What will be the output when running go test on this test file?
package main
import "testing"
func Add(a, b int) int {
return a + b
}
func TestAdd(t *testing.T) {
if Add(2, 3) != 5 {
t.Error("Expected 5")
}
}
medium
A. No output
B. PASS
C. Compilation error
D. FAIL with error 'Expected 5'
Solution
Step 1: Analyze the Add function and test
The Add function returns the sum of 2 and 3, which is 5.
Step 2: Check the test condition
The test expects Add(2, 3) to be 5, which is true, so no error is called.
Final Answer:
PASS -> Option B
Quick Check:
Correct sum means test passes = D [OK]
Hint: If test condition matches, output is PASS [OK]
Common Mistakes:
Assuming test fails when condition is true
Thinking test prints 'Expected 5' on success
Confusing test failure with compile error
4. Identify the error in this test code snippet:
package main
import "testing"
func TestMultiply(t *testing.T) {
result := Multiply(2, 3)
if result != 6 {
t.Error("Expected 6")
}
}
medium
A. Multiply function is not defined
B. Missing import for Multiply function
C. Test function name should be lowercase
D. t.Error should be t.Fail
Solution
Step 1: Check if Multiply function is defined
The code snippet does not show any definition or import of Multiply function.
Step 2: Understand Go requires functions to be defined or imported
Without definition or import, the code will not compile.
Final Answer:
Multiply function is not defined -> Option A
Quick Check:
Undefined function causes compile error = A [OK]
Hint: Undefined functions cause compile errors [OK]
Common Mistakes:
Thinking test function names can be lowercase
Confusing t.Error with t.Fail
Assuming missing import causes runtime error
5. You want to write a test that fails if a function returns an empty string. Which test code snippet correctly implements this check?
hard
A. func TestEmpty(t *testing.T) {
if MyFunc() == "" {
t.Error("Result should not be empty")
}
}
B. func TestEmpty(t *testing.T) {
if MyFunc() != "" {
t.Error("Result should be empty")
}
}
C. func TestEmpty(t *testing.T) {
if MyFunc() == nil {
t.Error("Result should not be nil")
}
}
D. func TestEmpty(t *testing.T) {
if MyFunc() == 0 {
t.Error("Result should not be zero")
}
}
Solution
Step 1: Understand the test goal
The test should fail if the function returns an empty string "".
Step 2: Check each option's condition
func TestEmpty(t *testing.T) {
if MyFunc() == "" {
t.Error("Result should not be empty")
}
} fails when MyFunc() returns "", which matches the goal.
Final Answer:
func TestEmpty(t *testing.T) {
if MyFunc() == "" {
t.Error("Result should not be empty")
}
} -> Option A
Quick Check:
Fail on empty string = A [OK]
Hint: Fail test if function returns empty string "" [OK]
Common Mistakes:
Checking for nil instead of empty string
Checking for zero instead of string
Reversing the condition logic
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.