Skip to content

Instantly share code, notes, and snippets.

@up1
Created April 28, 2014 13:31
Show Gist options
  • Save up1/11372126 to your computer and use it in GitHub Desktop.
Save up1/11372126 to your computer and use it in GitHub Desktop.
Demo for Dependency Injection with Golang
package di
import (
"fmt"
)
func AverageScore() float64 {
score := getTotalScore()
member := getAllMember()
return float64(score / member)
}
var getAllMember = func() int {
return 10
}
var getTotalScore = func() int {
return 100
}
func main() {
fmt.Println(AverageScore())
}
package di
import (
"fmt"
)
func AverageScore() float64 {
score := getTotalScore()
member := getAllMember()
return float64(score/member)
}
func getAllMember() int {
return 10
}
func getTotalScore() int {
return 100
}
func main() {
fmt.Println( AverageScore() )
}
func TestAverageScoreMock(t *testing.T) {
var callTotalScore = 0
var callAllMember = 0
getTotalScore = func() int {
callTotalScore++;
return 50
}
getAllMember = func() int {
callAllMember++;
return 2
}
AverageScore()
if callTotalScore != 1 { t.Error("getTotalScore should have been called 1 time only") }
if callAllMember != 1 { t.Error("getAllMember should have been called 1 time only") }
}
func TestAverageScoreReal(t *testing.T) {
var result = AverageScore()
if result != 10 {
t.Errorf("Expected %v to equal average", 10)
}
}
func TestAverageScoreStub(t *testing.T) {
getTotalScore = func() int {
return 200
}
getAllMember = func() int {
return 5
}
var result = AverageScore()
if result != 40 {
t.Errorf("Expected %v to equal average", 40)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment