我使用scala_specs2_junit_test
测试规则并且我希望将测试传递给系统属性(通常可以使用-DmyProp=myValue
。)
我发现这个thread听起来很相关,但它讨论的是java
(可以访问命令行参数的原生规则)和run
(vs test
)。
这可能吗?
答案 0 :(得分:2)
您可以使用--test_arg,但测试规则本身必须解释此类标记。
scala_specs2_junit_test
宏包含scala_junit_test
规则。作为测试规则,后者必须编写ctx.outputs.executable
(请参阅rule()#test),这是Bazel在bazel test //my:test
上执行的并将--test_arg
标记传递给。{/ p>
我没有在Scala规则中找到任何可以解析--jvm_flags
标志的逻辑,因此似乎需要更新它们来处理它。
<工作区> /my_test.bzl:
def _my_test_impl(ctx):
ctx.file_action(
ctx.outputs.executable,
"\n".join([
"#!/bin/bash",
"echo \"DEBUG: Hello from $(basename $0)\"",
"echo \"DEBUG: Argv=($@)\"",
# Flag parsing (e.g. --jvm_flags) would have to happen here
]),
True)
my_test = rule(
implementation = _my_test_impl,
test = True,
)
<工作区> / BUILD:
load("//:my_test.bzl", "my_test")
my_test(
name = "my_test",
)
输出:
$ bazel test //:my_test --test_output=streamed -t- --test_arg=--foo=bar --test_arg=--jvm_flags=blah
(...)
INFO: (14:45:05.379) Found 1 test target...
DEBUG: Hello from my_test
DEBUG: Argv=(--foo=bar --jvm_flags=blah)
Target //:my_test up-to-date:
bazel-bin/my_test
INFO: (14:45:05.501) Elapsed time: 0.393s, Critical Path: 0.11s
INFO: (14:45:05.501) Build completed successfully, 3 total actions
//:my_test PASSED in 0.1s
编辑:在my_test.bzl中添加评论以突出显示标志解析的位置
答案 1 :(得分:-3)
您始终可以使用System.setProperty(name,value)以编程方式在Java中设置系统属性。
在单元测试中执行此操作的缺点是该属性将在测试后保持设置状态。确保在测试后将值设置为null。