2017-09-27 2 views
-2

example.goというファイルとexample_test.goという別のテストファイルがあり、それらは同じパッケージに入っています。いくつかの非公開関数をテストしたいと思いますexample.goGoで未エクスポートの関数をテストする

私がテストを実行すると、未知の関数はexample_test.goで定義されていません。私は、同じパッケージ内にあるテストファイル内の非エクスポート関数をテストする最良の方法は何ですか?

+4

[MCVE]をご提示ください。テストファイルが同じパッケージ内にある場合は、すべてのパッケージレベル識別子にアクセスできます。 – JimB

+2

同じパッケージ内にある場合、関数とグローバル変数はすべて互いにアクセス可能でなければなりません。どのようにあなたのテストを実行していますか? 'go test/...'? – reticentroot

+1

未記入の識別子は同じパッケージからしかアクセスできないため、 'example_test.go'(ホワイトボックステスト)内で同じパッケージ宣言を使用してください。これは 'example.go'と同じフォルダになければなりません。詳細については、[テスト時にのみ、あるパッケージが別のパッケージの非エクスポートデータにアクセスする方法を教えてください](https://stackoverflow.com/questions/42930944/how-can-i-allow-one-package-access-to)を参照してください。 -nother-packages-unexported-data-only-whe/42931290#42931290) – icza

答えて

0

ファイルが本当に同じパッケージに含まれている場合、これは問題ではありません。私は問題なしで以下のテストを実行することができます。

ディレクトリ構造:

~/Source/src/scratch/JeffreyYong-Example$ tree . 
. 
├── example.go 
└── example_test.go 

example.go:

package example 

import "fmt" 

func unexportedFunc() { 
    fmt.Println("this totally is a real function") 
} 

example_test.go

package example 

import "testing" 

func TestUnimportedFunc(t *testing.T) { 
    //some test conditions 
    unexportedFunc() 
} 

テストコマンド:

〜/ソース/ src/scratch/JeffreyYong-Example $ go test -v。

出力:

=== RUN TestUnimportedFunc 
this totally is a real function 
--- PASS: TestUnimportedFunc (0.00s) 
PASS 
ok  scratch/JeffreyYong-Example  0.001s 
関連する問題