2016-06-02 4 views
3

Go 1.5+で実行する必要のあるテストが含まれているファイルがあります。1.4以降のシステムでテストファイルを実行すると、テストファイルはスキップされますか?

runtime.Version()を使用してさまざまな比較を行って、Goランタイムバージョンを取得できました。

ただし、テストファイルはgolang.org/x/net/http2をインポートします。 http2パッケージにはrequest.Cancel()からnet/httpまでが必要ですが、Go 1.5+でのみ利用可能です。ビルドが失敗する原因私のCI環境でこれらのエラーが発生し

../../../golang.org/x/net/http2/transport.go:214: req.Cancel undefined (type *http.Request has no field or method Cancel) 
../../../golang.org/x/net/http2/transport.go:218: req.Cancel undefined (type *http.Request has no field or method Cancel) 
../../../golang.org/x/net/http2/transport.go:777: req.Cancel undefined (type *http.Request has no field or method Cancel) 

私は、ファイルの先頭に// +build go1.5を追加しようとしたが、それはうまくいきませんでした。

ユニットテストファイルをGo 1.5システムのみでビルドしてテストするように制限することはできますか?

+0

私は私のテストファイルの最上部( '// + ignore'が正常に壊れたテストファイルを無視するビルド)でディレクティブを構築するなど、と何の問題もないが、私は」走って行く1.6。愚かな疑問: 'build'指示文とパッケージ名の間に空白行を追加しましたか?もしそうでなければ、彼らは考慮に入れられません(彼らはドキュメンテーションと見なされます)。 –

+0

それはそれでした!私は空白行を無視し、ビルドされた指示はドキュメントだと思った。 :) – F21

答えて

7

build constraintsは適切な方法です。

ただし、エラーメッセージにはパッケージ(added in Go 1.6)が含まれているため、少なくともgo1.6ビルド制約が必要です。

ビルド制約

// +build go1.5 

は、ファイルがゴー1.5以降してコンパイルされることになります。

制約(ソースファイルの任意の種類に表示される場合があります:あなたは、唯一のコンパイルおよび上記ゴー1.6で実行するテストファイルをしたいのであれば、その後もいることを忘れないでください

// +build go1.6 

を使用Goだけでなく)、ファイルの先頭近くにはと表示され、空白行とその他の行コメントの前に表示されます。これらの規則は、Goファイルでは、パッケージ句の前にビルド制約がなければならないことを意味します。

ビルド制約をパッケージドキュメントと区別するために、ビルド制約のシリーズには、空白行が続かなければなりません。

作業例:

1 // +build go1.6 
2 
3 package yourpackage 
関連する問題