0
0
Goprogramming~20 mins

Test-driven basics in Go - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Test-driven basics Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of a simple test function
What will be the output when running this Go test code with go test?
Go
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")
    }
}
ANo output, test file not recognized
B
FAIL
--- FAIL: TestAdd (0.00s)
    main_test.go:9: Expected 5
Cpanic: runtime error: invalid memory address or nil pointer dereference
D
PASS
ok  	command-line-arguments	0.001s
Attempts:
2 left
💡 Hint
The test checks if Add(2, 3) equals 5 and calls t.Error only if it doesn't.
Predict Output
intermediate
2:00remaining
Test failure output
What output will this test produce when run with go test?
Go
package main

import "testing"

func Multiply(a, b int) int {
    return a * b
}

func TestMultiply(t *testing.T) {
    if Multiply(2, 3) != 6 {
        t.Error("Expected 6")
    }
    if Multiply(2, 0) != 0 {
        t.Error("Expected 0")
    }
    if Multiply(2, -1) != -2 {
        t.Error("Expected -2")
    }
    if Multiply(2, 2) != 5 {
        t.Error("Expected 5")
    }
}
A
FAIL
--- FAIL: TestMultiply (0.00s)
    main_test.go:15: Expected 5
B
PASS
ok  	command-line-arguments	0.001s
C
FAIL
--- FAIL: TestMultiply (0.00s)
    main_test.go:9: Expected 6
Dpanic: index out of range
Attempts:
2 left
💡 Hint
Look carefully at the last if condition and its expected value.
🔧 Debug
advanced
2:00remaining
Identify the test bug causing no tests to run
Why does this test file produce 'ok command-line-arguments 0.001s' without running any tests?
Go
package main

import "testing"

func add(a, b int) int {
    return a + b
}

func testAdd(t *testing.T) {
    if add(1, 2) != 3 {
        t.Error("Expected 3")
    }
}
AThe test function name must start with uppercase 'Test' to be recognized by go test.
BThe add function is unexported and cannot be tested.
CThe testing package is not imported correctly.
DThe package name must be 'main_test' for tests to run.
Attempts:
2 left
💡 Hint
Test functions must follow a naming convention to be detected.
📝 Syntax
advanced
2:00remaining
Syntax error in test function
Which option contains the correct syntax for a Go test function?
A
func testSum(t *testing.T) {
    if Sum(1, 2) != 3 {
        t.Error("fail")
    }
}
B
func TestSum() {
    if Sum(1, 2) != 3 {
        t.Error("fail")
    }
}
C
func TestSum(t *testing.T) {
    if Sum(1, 2) != 3 {
        t.Error("fail")
    }
}
D
func TestSum(t testing.T) {
    if Sum(1, 2) != 3 {
        t.Error("fail")
    }
}
Attempts:
2 left
💡 Hint
Test functions must be exported and accept *testing.T as parameter.
🚀 Application
expert
2:00remaining
Number of tests run in a file
Given this test file, how many tests will be executed when running go test?
Go
package main

import "testing"

func TestOne(t *testing.T) {}
func TestTwo(t *testing.T) {}
func TestThree(t *testing.T) {}
func testFour(t *testing.T) {}
func TestFive() {}
func TestSix(t testing.T) {}
A4
B3
C5
D6
Attempts:
2 left
💡 Hint
Only functions starting with 'Test', exported, and with *testing.T parameter run as tests.