共有テストユーティリティを作成できますか? 質問する

共有テストユーティリティを作成できますか? 質問する

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 でパッケージ間でテスト ユーティリティを共有する慣用的な方法はありますか。

ベストアンサー1

_test.go以外のファイルにテストユーティリティを含むパッケージを作成します。このアプローチの例をいくつか示します。httpテストそしてioテスト

おすすめ記事