У меня есть небольшой Java-проект: один пакет с зависимостями от Google Truth, Google Guava, аннотаций JSR305 и TestNG для модульных тестов. У меня возникли проблемы с запуском тестов с Bazel. Я могу создать правило java_test и запустить его с помощью bazel test
, но XML-вывод Bazel дает мне один проход / сбой для всего набора тестов без информации об отдельных сбоях. XML от TestNG очищается вместе с песочницей.
Чтобы обойти это, я создал Genrule для TestNG XML, но в документации прямо сказано: «Не используйте Genrule для тестирования», поэтому мне интересно, есть ли лучший подход.
Мой файл BUILD выглядит так:
java_library(
name='myproject',
srcs=glob(['src/main/java/**/*.java']),
deps=[
'@com_google_code_findbugs_jsr305//jar',
'@com_google_guava_guava//jar',
],
)
java_library(
name='myproject-test-lib',
srcs=glob(['src/test/java/**/*.java']),
deps=[
':myproject',
'@com_google_code_findbugs_jsr305//jar',
'@com_google_guava_guava//jar',
'@com_google_truth_truth//jar',
'@org_testng_testng//jar',
],
)
java_test(
name='myproject-test',
size='small',
runtime_deps=[
':myproject',
':myproject-test-lib',
'@org_testng_testng//jar',
'@com_beust_jcommander//jar', # Used by TestNG CLI
'@org_yaml_snakeyaml//jar', # Used by TestNG to parse YAML
'@junit_junit//jar', # Dependency of Truth
],
data=['testng.yaml'],
use_testrunner=False,
main_class='org.testng.TestNG',
args=['testng.yaml'],
)
genrule(
name='myproject-test-report',
srcs=['testng.yaml'],
tools=[
':myproject',
':myproject-test-lib',
'@com_google_code_findbugs_jsr305//jar',
'@com_google_guava_guava//jar',
'@com_google_truth_truth//jar',
'@org_testng_testng//jar',
'@com_beust_jcommander//jar', # Used by TestNG CLI
'@org_yaml_snakeyaml//jar', # Used by TestNG to parse YAML
'@junit_junit//jar', # Dependency of Truth
],
outs=['testng_report'],
cmd='$(JAVA) -cp $(location :myproject):$(location :myproject-test-lib):$(location @com_google_code_findbugs_jsr305//jar):$(location @com_google_guava_guava//jar):$(location @com_google_truth_truth//jar):$(location @org_testng_testng//jar):$(location @com_beust_jcommander//jar):$(location @org_yaml_snakeyaml//jar):$(location @junit_junit//jar) org.testng.TestNG -d $(OUTS) -usedefaultlisteners false testng.yaml'
)
... Я подозреваю, что есть способ лучше справиться с classpath. Мой файл WORKSPACE, для полноты:
workspace(name='com_example_myproject')
maven_jar(
name='com_google_code_findbugs_jsr305',
artifact='com.google.code.findbugs:jsr305:3.0.1',
sha1='f7be08ec23c21485b9b5a1cf1654c2ec8c58168d',
)
maven_jar(
name='com_google_guava_guava',
artifact='com.google.guava:guava:21.0',
sha1='3a3d111be1be1b745edfa7d91678a12d7ed38709',
)
maven_jar(
name='com_google_truth_truth',
artifact='com.google.truth:truth:0.32',
sha1='e996fb4b41dad04365112786796c945f909cfdf7',
)
maven_jar(
name='org_testng_testng',
artifact='org.testng:testng:6.11',
sha1='1fdd5e22f50b14f6d846163456e8c9a7657626fb',
)
maven_jar(
name='com_beust_jcommander',
artifact='com.beust:jcommander:1.64',
sha1='456a985ac9b12d34820e4d5de063b2c2fc43ed5a',
)
maven_jar(
name='org_yaml_snakeyaml',
artifact='org.yaml:snakeyaml:1.17',
sha1='7a27ea250c5130b2922b86dea63cbb1cc10a660c',
)
maven_jar(
name='junit_junit',
artifact='junit:junit:4.10',
sha1='e4f1766ce7404a08f45d859fb9c226fc9e41a861',
)