Cucumber-jvm: Feature file without 'Feature:' line results in a hard to debug exception

Created on 27 Jan 2020  路  3Comments  路  Source: cucumber/cucumber-jvm

Summary

If the feature file doesn't contain a Feature line (or it's commented out), a NullPointerException is thrown. Unfortunately, when running via Maven, no stack trace is produced (tested with various verbosity flags, including OmitStackTraceInFastThrow).

Expected Behavior

Cucumber should either ignore the file or produce a more helpful error message.

Current Behavior

Maven outputs:

[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.013 s <<< FAILURE! - in com.test.testing.CucumberTest 
[ERROR] com.test.testing.CucumberTest  Time elapsed: 0.002 s  <<< ERROR!
java.lang.NullPointerException

[INFO]  
[INFO] Results:
[INFO]
[ERROR] Errors: 
[ERROR]   CucumberTest 禄 NullPointer 
[INFO]
[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0

The actual stack trace is:

java.lang.NullPointerException
    at io.cucumber.core.gherkin.vintage.GherkinVintageFeature.<init>(GherkinVintageFeature.java:30)
    at io.cucumber.core.gherkin.vintage.GherkinVintageFeatureParser.parseGherkin5(GherkinVintageFeatureParser.java:31)
    at io.cucumber.core.gherkin.vintage.GherkinVintageFeatureParser.parse(GherkinVintageFeatureParser.java:51)
    at io.cucumber.core.feature.FeatureParser.parseResource(FeatureParser.java:43)
    at io.cucumber.core.runtime.FeaturePathFeatureSupplier.lambda$new$0(FeaturePathFeatureSupplier.java:39)
    at java.util.function.BiFunction.lambda$andThen$0(BiFunction.java:70)
    at io.cucumber.core.resource.ResourceScanner.lambda$null$2(ResourceScanner.java:126)
    at io.cucumber.core.resource.PathScanner$ResourceFileVisitor.visitFile(PathScanner.java:67)
    at io.cucumber.core.resource.PathScanner$ResourceFileVisitor.visitFile(PathScanner.java:52)
    at java.nio.file.Files.walkFileTree(Files.java:2670)
    at java.nio.file.Files.walkFileTree(Files.java:2742)
    at io.cucumber.core.resource.PathScanner.findResourcesForPath(PathScanner.java:46)
    at io.cucumber.core.resource.PathScanner.findResourcesForUri(PathScanner.java:26)
    at io.cucumber.core.resource.ResourceScanner.findResourcesForUri(ResourceScanner.java:109)
    at io.cucumber.core.resource.ResourceScanner.scanForResourcesUri(ResourceScanner.java:86)
    at io.cucumber.core.runtime.FeaturePathFeatureSupplier.loadFeatures(FeaturePathFeatureSupplier.java:62)
    at io.cucumber.core.runtime.FeaturePathFeatureSupplier.get(FeaturePathFeatureSupplier.java:46)
    at io.cucumber.junit.Cucumber.<init>(Cucumber.java:156)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)
    at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:49)
    at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
    at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)
    at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)

Steps to Reproduce (for bugs)

  1. create a feature file with no Feature or commented out feature
  2. create the usual Junit RunCucumberTestIT runner
  3. maven verify

Your Environment

  • Version used: Cucumber - 5.0.0, Junit - 5.6.0, Maven Failsafe - 3.0.0-M4, Java 8
  • Operating System and version: Ubuntu 18.04.1 LTS
bug

Most helpful comment

Cheers.

Btw the maven option you're looking for is: -DtrimStackTrace=false

https://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#trimStackTrace

All 3 comments

Cheers.

Btw the maven option you're looking for is: -DtrimStackTrace=false

https://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#trimStackTrace

Just confirming that -DtrimStackTrace=false helps, and would reduce the debug time if I have found it.

Fixed in 59109784821e1362e2be320c2bfbc5fc3bc40421

Was this page helpful?
0 / 5 - 0 ratings