2016-07-20 14 views
0

sagen, dass ich in main.go habenTesting Golang importierte Funktion heißt?

package main 

import "foobar" 

func moo() { 
    foobar.Boom("!") 
} 

func main() { 
    moo() 
} 

Wie Stummel ich Boom aus und stellen Sie sicher, dass es mit den richtigen Parametern aufgerufen wurde?

+0

sollten Sie in der Abhängigkeit übergeben wie 'func moo (boom func(), s-String)' siehe https://play.golang.org/p/CV14zqZvOk – Plato

Antwort

1

Die Go-way wäre, eine Schnittstelle zu verwenden. Auch wenn Sie das foobar-Paket nicht ändern können.

1) schaffen eine boomer Schnittstelle

type Boomer interface{ 
    Boom(string) 
} 

2) Veränderung MOO(), dass sie die boomer

func moo(b Boomer) { 
    b.Boom("!") 
} 

3) fügen eine Variable mit dem foobar

akzeptiert

Für den Spielplatz benutze ich die folgenden Nachteile trukt. Aber mit einem externen Paket können Sie die foobar.Boom verwenden() anstelle von println

type foobar struct{} 

func (fb foobar) Boom(s string) { 
    fmt.Println(s) 
} 

var f Boomer = foobar{} 

https://play.golang.org/p/200WIok1pL

4) In Ihrem Test eine Test boomer implementieren

type testboomer struct{ 
    boomstring string 
} 

func (tb *testboomer) Boom(s string) { 
    tb.boomstring = s 
} 

Nachdem Sie die Funktion moo() genannt, zeigt der Testboomer.boomstring den Wert an.