bazel testdata 绝对路径需要'/external/'
bazel testdata absolute path need '/external/'
我有一个测试:
cc_test(
name = "common_test",
linkstatic = 1,
srcs = glob([
"common/test/*.cpp",
]),
linkopts = [
"-L/usr/local/lib",
"-L/usr/lib64",
"-g",
"-lcppunit",
"-ldl",
"-lz",
"-ltbb",
"-llz4",
],
data= [
"@:testdata"
]
)
我的测试数据定义在:
filegroup(
name = "testdata",
srcs = glob([
"testdata/biz_test/*.json",
]),
visibility = ["//visibility:public"]
)
TEST_PATH 到达这里 :
TESTBASE_BASE() {
char cwdBuf[10240];
if (getcwd(cwdBuf, 10240) == NULL) {
std::cerr << "get cwd failed, error:" << strerror(errno) << std::endl;
assert(false);
}
_testRootPath = cwdBuf;
}
std::string GET_TEST_DATA_PATH(std::string bazelTestPath = "") const {
return _testRootPath + bazelTestPath + std::string("/testdata/");
}
在我的测试代码中:
GET_TEST_DATA_PATH() +"/biz_info_test/" can't find the testdata
GET_TEST_DATA_PATH('/external/my_project') +"/biz_info_test/" is ok
因为我有很多项目要改成bazel编译,所以我需要一个更通用的方法来解决testdata路径problem.I不想写这样的代码:
GET_TEST_DATA_PATH('/external/my_project1') +"/biz_info_test/"
GET_TEST_DATA_PATH('/external/my_project2') +"/biz_info_test/"
GET_TEST_DATA_PATH('/external/my_project3') +"/biz_info_test/"
我希望bazel可以这样做:
它可以找到我的 WORKSPACE 目录在哪里。
my_pj/
├── my_pj
│ └── BUILD
├── testdata
└── WORKSPACE
so my testdata dir is: _testRootPath + std::string("/testdata/")
这是一个已知问题,我们正在努力对其进行更改以符合您的期望。不幸的是,这是一个艰难的改变,因为它影响了所有使用 Bazel 构建的项目(包括 Google 中的所有项目)。
我有一个测试:
cc_test(
name = "common_test",
linkstatic = 1,
srcs = glob([
"common/test/*.cpp",
]),
linkopts = [
"-L/usr/local/lib",
"-L/usr/lib64",
"-g",
"-lcppunit",
"-ldl",
"-lz",
"-ltbb",
"-llz4",
],
data= [
"@:testdata"
]
)
我的测试数据定义在:
filegroup(
name = "testdata",
srcs = glob([
"testdata/biz_test/*.json",
]),
visibility = ["//visibility:public"]
)
TEST_PATH 到达这里 :
TESTBASE_BASE() {
char cwdBuf[10240];
if (getcwd(cwdBuf, 10240) == NULL) {
std::cerr << "get cwd failed, error:" << strerror(errno) << std::endl;
assert(false);
}
_testRootPath = cwdBuf;
}
std::string GET_TEST_DATA_PATH(std::string bazelTestPath = "") const {
return _testRootPath + bazelTestPath + std::string("/testdata/");
}
在我的测试代码中:
GET_TEST_DATA_PATH() +"/biz_info_test/" can't find the testdata
GET_TEST_DATA_PATH('/external/my_project') +"/biz_info_test/" is ok
因为我有很多项目要改成bazel编译,所以我需要一个更通用的方法来解决testdata路径problem.I不想写这样的代码:
GET_TEST_DATA_PATH('/external/my_project1') +"/biz_info_test/"
GET_TEST_DATA_PATH('/external/my_project2') +"/biz_info_test/"
GET_TEST_DATA_PATH('/external/my_project3') +"/biz_info_test/"
我希望bazel可以这样做: 它可以找到我的 WORKSPACE 目录在哪里。
my_pj/
├── my_pj
│ └── BUILD
├── testdata
└── WORKSPACE
so my testdata dir is: _testRootPath + std::string("/testdata/")
这是一个已知问题,我们正在努力对其进行更改以符合您的期望。不幸的是,这是一个艰难的改变,因为它影响了所有使用 Bazel 构建的项目(包括 Google 中的所有项目)。