2016-12-14 7 views
0

ScalaTest WordSpec позволяет тесты должны быть проигнорированы, как это:ScalaTest: условно игнорировать тест WordSpec

class MySpec extends WordSpec { 
    "spec" should { 
    "ignore test" ignore {fail("test should not have run!")} 
    } 
} 

, который является большим, но я не хочу, чтобы забыть о игнорируемых тестах. Поэтому я хотел бы, чтобы поведение игнорирования истекало после указанной даты. В этот момент тест будет работать как обычно, либо: 1) пройти (надеюсь) или 2) напомнить мне, что он все еще сломан.

Для этого я пытаюсь расширить DSS WordSpec для поддержки функции ignoreUntil. Это приняло бы дату истечения срока действия строки и проигнорировало бы тест, если дата еще будет в будущем, иначе запустите тест.

Мой тест спецификации будет выглядеть:

class MySpec extends EnhancedWordSpec { 
    "spec" should { 
    "conditionally ignore test" ignoreUntil("2099-12-31") {fail("test should not have run until the next century!")} 
    } 
} 

Я реализован ignoreUntil функция здесь:

class EnhancedWordSpec extends WordSpecLike { 
    implicit protected def convertToIgnoreUntilWrapper(s: String) = new IgnoreUntilWordSpecStringWrapper(s) 

    protected final class IgnoreUntilWordSpecStringWrapper(wrapped: String) { 
    // Run test or ignore, depending if expiryDate is in the future 
    def ignoreUntil(expiryDate: String)(test: => Any): Unit = ??? 
    } 
} 

Однако sbt test дает мне следующую ошибку компиляции:

MySpec.scala:3: type mismatch; 
[error] found : Char 
[error] required: String 
[error]   "ignoreUntil" ignoreUntil("2099-12-31"){fail("ignoreUntil should not have run!")} 
[error]            ^
[error] one error found 
[error] (test:compileIncremental) Compilation failed 

Почему именно компилятор не похож на подпись ignoreUntil функция?

Есть ли какое-то вуду с импликациями?

ответ

1

Слишком много аргументов. Неявная строка не была правильно решена.

два варианта:

  • добавить точку после того, как "имя" тест

  • двигаться как expireDate и test: => Any параметры для одного набора. Параметра Я

    "conditionally ignore test".ignoreUntil("2099-12-31") { fail("test should not have run until the next century!") }

+1

я уже рассматривал один набор параметров и сбрасывать со счетов, потому что она изменяет структуру теста немного больше, чем хотелось бы. Но мне нравится ваше решение использовать явный символ точки в вызове 'ignoreUntil'. Это кажется мне менее навязчивым решением. Спасибо, что объяснили ошибку и предложили решения. – cybersaurus