2016-06-25 11 views
1

次些細main.goファイルを考えてみましょう:私はfoo機能をテストすることができる方法を取得どのようにメイン関数内のコードをテストします

package main 

type myStruct struct { 
    songs []string 
} 

func main() { 
    s1 := myStruct{ 
    songs:[]string{"Master of Puppets", "Battery"} 
    } 
    foo(s1) 
} 

func foo(s myStruct) { 
    // Does something with s 
} 

を。しかし、どのようにして主関数がs1構造体を正しく初期化し、s1を引数としてfoo関数が呼び出されると主張することができますか?

+3

目に見える現象がないものをテストするのは難しいでしょう。 –

+2

ユニットテストの対象となるものをメインの外に移動します。 – JimB

+1

初期化をテストしますか?どうしてそうするか? – jnmoal

答えて

-1

最も基本的なデバッグツールを試してみませんか?

package main 

import "fmt" 

type myStruct struct { 
    songs []string 
} 

func main() { 
    s1 := myStruct{songs:[]string{"Master of Puppets", "Battery"}} 
    foo(s1) 
} 

func foo(s myStruct) { 
    // Does something with s 
    for i:=0;i<len(s.songs);i++ { 
    fmt.Printf("s.songs[%d]=\"%s\"\n",i, s.songs[i]) 
    } 
} 

出力:

s.songs[0]="Master of Puppets" 
s.songs[1]="Battery" 

あなたが本当にあなたの構造が正しくあなたの主な機能の内部で初期化されたかどうかをテストしたい場合:

package main 

import "fmt" 

type myStruct struct { 
    songs []string 
} 

func main() { 
    s1 := myStruct{songs:[]string{"Master of Puppets", "Battery"}} 
    foo(s1) 
    for i:=0;i<len(s1.songs);i++ { 
    fmt.Printf("s1.songs[%d]=\"%s\"\n",i, s1.songs[i]) 
    } 
} 

func foo(s myStruct) { 
    // Does something with s 
    fmt.Printf("foo has finished its work!\n") 
} 

出力:

foo has finished its work! 
s1.songs[0]="Master of Puppets" 
s1.songs[1]="Battery" 

あなたがしたい場合は 必ず両方のmain()とFOOを作る()同じオブジェクトで作業している、これを試してみてください。

package main 

import "fmt" 

type myStruct struct { 
    songs []string 
} 

func main() { 
    s1 := myStruct{songs:[]string{"Master of Puppets", "Battery"}} 
    foo(&s1) 
    fmt.Printf("main() says: s1 lives in the address:%p\n",&s1) 
} 

func foo(s *myStruct) { 
    // Does something with s 
    fmt.Printf("foo() says: s lives in the address:%p\n",s) 
} 

出力:

foo() says: s lives in the address:0x10434120 
main() says: s1 lives in the address:0x10434120 

次回は、あなたの質問に、より具体的なことしてみてください。

乾杯。

関連する問題