2017-09-18 3 views
1
を返します

GetTempPathWを呼び出し、返されたdirに一時ファイルを作成しようとするテストがあります。テストを直接実行すると、GetTempPathWC:\Users\sgreens\AppData\Local\Temp\を返してパスします。私がbazel testでそれを実行すると、それはC:\Windows\を返し、テストはそこにファイルを作成することができません。 documentation of GetTempPathからBazelで実行するとGetTempPathはC: Windows

環境の存在をGetTempPath関数チェック 変数を次の順序で見つかった最初のパスを使用:

  1. TMP環境変数で指定されたパス。
  2. TEMP環境変数で指定されたパス。
  3. 環境変数USERPROFILEで指定されたパス。
  4. Windowsディレクトリ。 CMDウィンドウで

私はからbazelを実行します。CROSSTOOLで

C:\Users\sgreens\yeti\yeti>echo %TMP% 
C:\Users\sgreens\AppData\Local\Temp 

C:\Users\sgreens\yeti\yeti>echo %TEMP% 
C:\Users\sgreens\AppData\Local\Temp 

C:\Users\sgreens\yeti\yeti>echo %USERPROFILE% 
C:\Users\sgreens 

C:\Users\sgreens\yeti\yeti>echo %WINDIR% 
C:\WINDOWS 

私はビルド時に生成:

env_entry { 
    key: "TMP" 
    value: "C:\\Users\\sgreens\\AppData\\Local\\Temp" 
    } 
    env_entry { 
    key: "TEMP" 
    value: "C:\\Users\\sgreens\\AppData\\Local\\Temp" 
    } 

BazelはGetTempPathC:\Windows\を復帰させるためには何をしているのですか?どうすれば修正できますか?

おそらく関連する問題: '$' sign in the output base make all tests failed on windows

答えて

2

あなたが直接テストを実行すると、あなたは、通常のコマンド環境でそれを実行します。テストでは、同じ環境変数が表示されます。つまり、印刷した変数TMP/TEMPが使用されます。

bazel testでテストを実行すると、Bazelはトリムダウン環境で、可能な限り定義された環境変数を少なくしてテストを実行します。 Bazelは、このテストをできるだけ再現性のあるものにするためにこれを行います。テストがクライアント環境に依存する場合、環境変数を変更すると、テストが失敗したり失敗したりする可能性があり、予測不可能な動作は望ましくありません。

これは既知の問題であり、私は積極的に解決に取り組んでいます:https://github.com/bazelbuild/bazel/issues/2870

あなたのための回避策は--test_env=TMPを使用することです。このフラグはBazelにあなたのTMPの値をテストの環境にコピーするよう指示します。

関連する問題