Go のパッケージ間でテスト ユーティリティ コードを共有できるかどうか疑問に思っています。具体的には、さまざまなメッセージ タイプに対して複数のハンドラーによって使用される TCP サーバーを作成しており、共通のテスト ユーティリティのセットを再利用したいと考えています。
メインの TCP サーバー コードは次の場所にありますmypkg/tcpserver
。
mypkg/tcpserver/tcp_server.go
mypkg/tcpserver/tcp_server_test.go
mypkg/tcpserver/testutils_test.go
このtestutils_test.go
コードは、他のパッケージがテスト用のテスト サーバーとクライアントをセットアップするために使用できる共有ライブラリとなることを目的としていますmypkg/tcpserver
。たとえば、handler
サブパッケージには次のものがあります。
mypkg/tcpserver/handler/handler.go
mypkg/tcpserver/handler/csv_handler.go
mypkg/tcpserver/handler/csv_handler_test.go
mypkg/tcpserver/handler/delim_handler.go
mypkg/tcpserver/handler/delim_handler_test.go
ファイルhandler/*_test.go
はすべて をインポートしますmypkg/tcpserver
が、 で定義されているテスト ユーティリティにアクセスできませんmypkg/tcpserver/testutils_test.go
。
$ wgo test mypkg/tcpserver/handler
# mypkg/tcpserver/handler
src/mypkg/tcpserver/handler/csv_handler_test.go:37: undefined: tcpserver.CreateTestServer
src/mypkg/tcpserver/handler/csv_handler_test.go:40: undefined: tcpserver.TestSender
FAIL mypkg/tcpserver/handler [build failed]
テストは他のパッケージをインポートできるようですが、それらのパッケージ内で定義されたテスト コードはインポートできないようです。これが意図されているのでしょうか。もしそうなら、Go でパッケージ間でテスト ユーティリティを共有する慣用的な方法はありますか。