Я пытаюсь запустить функции огурца в JUnit 5 Jupiter. Я снял код из источника Cucumber-jvm и адаптировал его для JUnit 5 TestFactory
. Он работает: Я вижу, что мои возможности работать, когда я бегу все тесты JUnit (это Котлин код, но то же самое относится и к Java):Как получить результат функции огурца
@CucumberOptions(
plugin = arrayOf("pretty"),
features = arrayOf("classpath:features")
)
class Behaviours {
@TestFactory
fun loadCucumberTests() : Collection<DynamicTest> {
val options = RuntimeOptionsFactory(Behaviours::class.java).create()
val classLoader = Behaviours::class.java.classLoader
val resourceLoader = MultiLoader(classLoader)
val classFinder = ResourceLoaderClassFinder(resourceLoader, classLoader)
val runtime = Runtime(resourceLoader, classFinder, classLoader, options)
val cucumberFeatures = options.cucumberFeatures(resourceLoader)
return cucumberFeatures.map<CucumberFeature, DynamicTest> { feature ->
dynamicTest(feature.gherkinFeature.name) {
var reporter = options.reporter(classLoader)
feature.run(options.formatter(classLoader), reporter, runtime)
}
}
}
}
Однако JUnit сообщает, что каждая функция была успешной, то ли он или нет фактически был. Когда функции не работают, результаты корректно печатаются, но сгенерированные DynamicTest
проходят. Ни gradle test
, ни Intellij не замечают ошибку: мне нужно проверить вывод текста.
Я думаю, что мне нужно выяснить, в Executable
, переданном как второй параметр dynamicTest
, каков был результат этой функции, и при необходимости поднимите утверждение. Как определить результат feature
или feature.gherkinFeature
в этот момент?
И есть ли способ получить результаты для каждого сценария в этой функции? Или лучше, есть ли способ запустить конкретный сценарий, чтобы я мог создать DynamicTest для каждого сценария, что позволило мне улучшить детализацию отчетов в JUnit?
Вы можете использовать После крюка и передать объект Сценария к нему. Класс сценария имеет getStatus(), который возвращает переданный, неудачный, неопределенный, пропущенный, ожидающий или isFailed(), который возвращает логическое значение. – Grasshopper
Возможно [этот вопрос] (https://stackoverflow.com/questions/35550386/cucumber-jvm-hooks-when-scenario-is-passed-or-failed/35553304#35553304) может вам помочь. – troig
Какой тип 'репортер' в вашем примере? Я мало разбирался в Junit5, но для интеграции junit4 это должен быть «JunitReporter», который пересылает информацию в junit' RunNotifier'. –