我有一个调用GetTempPathW并试图在返回的dir中创建临时文件的测试。当我直接运行测试时,GetTempPathW返回C:\Users\sgreens\AppData\Local\Temp\并通过测试。当我使用bazel test运行它时,它返回C:\Windows\,并且测试无法在那里创建文件。
GetTempPath函数按照以下顺序检查环境变量的存在,并使用找到的第一条路径:
在cmd窗口中我从以下位置运行bazel:
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在生成时生成的CROSSTOOL中:
env_entry {
key: "TMP"
value: "C:\\Users\\sgreens\\AppData\\Local\\Temp"
}
env_entry {
key: "TEMP"
value: "C:\\Users\\sgreens\\AppData\\Local\\Temp"
}Bazel是如何使GetTempPath返回C:\Windows\的?我怎么才能修好它?
可能相关的问题:输出基中的“$”符号使所有测试在windows上失败
发布于 2017-09-19 12:48:54
当直接运行测试时,您将在正常的命令环境中运行它。测试可以看到与您相同的环境变量,即它使用您打印的TMP/TEMP变量。
当您使用bazel test运行测试时,Bazel会在一个精简的环境中运行它,并且尽可能地定义少量的环境变量。Bazel这样做是为了使测试尽可能可重复:如果测试依赖于客户端环境,那么更改环境变量可能会让它通过或失败,我们不希望出现这种不可预测的行为。
这是一个已知的问题,我正在积极解决这个问题:https://github.com/bazelbuild/bazel/issues/2870
解决方法之一是使用--test_env=TMP。此标志告诉Bazel将TMP值复制到测试的环境中。
https://stackoverflow.com/questions/46286540
复制相似问题