Внутри спок-теста мы хотим создать ресурс и убедиться, что он размещен правильно, независимо от результата теста.
Мы попробовали подход, описанный ниже. Но spock не выполняет тесты, когда тестовый код заключен в замыкание.
import spock.lang.Specification
class ExampleSpec extends Specification {
def wrapperFunction(Closure cl) {
try {
cl()
} finally {
// do custom stuff
}
}
def "test wrapped in closure"() {
wrapperFunction {
expect:
1 == 1
println "will not execute!"
}
}
}
Каков наилучший подход к созданию и удалению ресурса внутри спок-теста.
setup()
и cleanup()
не являются жизнеспособными решениями, поскольку создание и удаление должны быть возможны в произвольных точках внутри метода объекта.
1 ответ
Вы можете использовать блоки setup
и cleanup
внутри тестового примера (метод функции) следующим образом:
class ReleaseResourcesSpec extends Specification {
void 'Resources are released'() {
setup:
def stream = new FileInputStream('/etc/hosts')
when:
throw new IllegalStateException('test')
then:
true
cleanup:
stream.close()
println 'stream was closed'
}
}
Код из блока cleanup
всегда выполняется, даже если тест не пройден или если есть какое-либо исключение. См. результат приведенного выше примера:
Таким образом, это похоже на методы setup()
и cleanup()
, но в этом случае у вас может быть разная настройка и код очистки для каждого метода функции.
Похожие вопросы
Новые вопросы
groovy
Groovy - это объектно-ориентированный язык программирования для платформы Java. Это динамический язык с функциями, аналогичными Python, Ruby, Perl и Smalltalk. Он может использоваться в качестве языка сценариев для платформы Java.
cl
вызывается?expect:
и написании обычных утверждений внутри этого замыкания.