2015-04-29 3 views
0

я переопределять свои тесты, чтобы поставить некоторые аргументы конфигурации для тестирования набора:SBT: выполнить задачу, используя другое значение задачи

Это отрывок из моего Build.scala:

object Build extends Build { 
    lazy val myProject = (project in file("my_project")).settings(
    test in Test := myProjectTest.value 
) 

    val myProjectTest = Def.task { 
    (testOnly in Test).toTask(" tests.Suites -- " + 
     s"-Ddbserver=localhost " + 
     s"-Ddbport=3306 ").value 
    } 
} 

Это работает нормально.

Теперь я хотел бы дать мой тестовый набор имя артефакта, как это:

val myProjectTest = Def.task { 
    val art = (Keys.artifactPath in (Compile, packageBin)).value 

    (testOnly in Test).toTask(" tests.Suites -- " + 
    s"-Dartifact=${art.getCanonicalPath} " + 
    s"-Ddbserver=localhost " + 
    s"-Ddbport=3306").value 
} 

Но он показывает следующее сообщение об ошибке:

[error] /tmp/aa/project/Build.scala:17: Illegal dynamic reference: art 
[error]  s"-Dartifact=${art.getCanonicalPath} " + 
[error]     ^
[error] one error found 
[error] (compile:compileIncremental) Compilation failed 

Я знаю что-то о SBT внутренности, макросы, график зависимостей задач, и мне даже удалось решить некоторые из моих задач с помощью областей. Здесь я попытался использовать карту или flatMap на (Keys.artifactPath in (Compile, packageBin)), но не смог достичь желаемого результата. Всякий раз, когда я пытаюсь получить доступ, я получаю Illegal dynamic reference.

Прошу, посоветуйте мне. Мне просто нужно передать значение задачи другим параметрам (inputKey).

версия SBT: 0.13.5

+0

написания кода, который работает и помогает воспроизвести проблему драматический помогут получить ответ на вашу проблему , – sschaef

+0

Это код. Я не ожидаю никаких исследований, и любой пользователь sbt, который написал пользовательские сборки, скорее найдет информацию достаточной. Ваш отрицательный голос уменьшает мои шансы получить быстрый ответ, между прочим. – dmitry

ответ

0

Метод проб и ошибок я сделал то, что я хотел в конце концов, с помощью Def.taskDyn (динамической задачи):

object Build extends Build { 
    lazy val myProject = (project in file("my_project")).settings(
    test in Test := myProjectTest.value 
) 

    lazy val myProjectTest = Def.taskDyn { 
    val art = (Keys.artifactPath in (Compile, packageBin)).value 

    (testOnly in Test).toTask(" tests.Suites -- " + 
     s"-Dartifact=${art.getCanonicalPath} " + 
     s"-Ddbserver=localhost " + 
     s"-Ddbport=3306") 
    } 
} 
0

Я никогда не видел, указав параметры тестирования с помощью .toTask.

Хотите посмотреть, подходит ли testOptions in Test? См. Раздел Options документов Тестирования.

+0

Дело в том, что я генерирую аргументы динамически, я просто опустил его из вопроса как не релевантный. Я прочитал некоторый файл в каталоге 'project' и передал значения в тестовый набор. Я не знаю, подходит ли testOptions. – dmitry

Смежные вопросы