我一直在尝试使用 JBehave 运行并发的多线程故事。它们在使用嵌入器时运行正确,但是当它们作为可嵌入物运行时,它们不会执行。当我更改源目录或范围时,我得到一个 nullpointerException,当我将它们注释掉时,它会成功构建,但找不到类“My-ProgramStories.java”。当我使用带有“mvn clean verify”的Maven执行它们时,这就是返回的内容(对于丑陋的格式感到抱歉):
[信息] --- jbehave-maven-plugin:3.7.5:run-stories-as-embeddables (embeddable-stories) @ program-test> ---
[INFO] 使用 embedder Embedder 将故事作为可嵌入对象运行[storyMapper=StoryMapper,storyRunner=StoryRunner, embedderMonitor=MavenEmbedderMonitor,classLoader=EmbedderClassLoader[urls=[/Users//Documents/Repositories///target/test-classes/, /Users/ /Documents/Repositories///target/classes, groovy-all-1.8.4.jar],parent=ClassRealm[plugin>org.jbehave:jbehave-maven-plugin:3.7.5, parent: sun.misc.Launcher$ AppClassLoader@1729854]],embedderControls= UnmodifiableEmbedderControls[EmbedderControls[batch=false,skip=false,generateViewAfterStories true,ignoreFailureInStories=true,ignoreFailureInView=true,verboseFailures=false,verboseFiltering=false,storyTimeoutInSecs=400,threads=4]], embedderFailureStrategy =org.jbehave.core.embedder.Embedder$ThrowingRunningStoriesFailed@127c1 ee,configuration=org.jbehave.core.configuration。MostUsefulConfiguration@10c56cbd,candidateSte s=[],stepsFactory=,metaFilters=[groovy:story_path ==~ /.*.story/],systemProperties {},executorService=,executorServiceCreated=false,storyManager=]
[信息] --------------------------------------------- -------------------------
[信息] 构建失败
[信息] ----------------- -------------------------------------------------- -----
[INFO] Total time: 1:04.710s
[INFO] Finished at: Mon Jul 29 09:55:43 CDT 2013
[INFO] Final Memory: 60M/123M
[INFO] ------- -------------------------------------------------- ---------------
[错误] 无法在项目上执行目标 org.jbehave:jbehave-maven-plugin:3.7.5:run-stories-as embeddables (embeddable-stories):无法将故事作为可嵌入对象运行:NullPointerException -> [帮助 1]
这就是我在 POM 中配置 JBehave Maven 插件的方式:
<properties>
<embeddables>**/My-ProgramStories.java</embeddables>
<ignore.failre.in.stories>true</ignore.failre.in.stories>
<meta.filter>groovy: story_path ==~ /.*.story/</meta.filter>
<threads>4</threads>
<story.timeout.in.secs>400</story.timeout.in.secs>
</properties>
...
<plugin>
<groupId>org.jbehave</groupId>
<artifactId>jbehave-maven-plugin</artifactId>
<executions>
<execution>
<id>embeddable-stories</id>
<phase>integration-test</phase>
<configuration>
<includes>
<include>${embeddables}</include>
</includes>
<excludes>
<exclude>${exclude}</exclude>
</excludes>
<scope>test</scope>
<sourceDirectory>src/test/java</sourceDirectory>
<testSourceDirectory>src/test/resources</testSourceDirectory>
<skip>${skip}</skip>
<batch>false</batch>
<threads>${threads}</threads>
<storyTimeoutInSecs>${story.timeout.in.secs}</storyTimeoutInSecs>
<generateViewAfterStories>true</generateViewAfterStories>
<ignoreFailureInStories>
${ignore.failre.in.stories}
</ignoreFailureInStories>
<ignoreFailureInView>true</ignoreFailureInView>
<metaFilters>
<metaFilter>${meta.filter}</metaFilter>
</metaFilters>
</configuration>
<goals>
<goal>run-stories-as-embeddables</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>1.8.4</version>
</dependency>
</dependencies>
</plugin>
通过 Eclipse 查看的故事和测试类的结构以及我的故事文件如下:
my-program-test
-->src/test/java
---->package1
------>My-ProgramSteps.java
------>My-ProgramStories.java
-->src/test/资源
---->package1
------>故事文件
这是错误的堆栈跟踪:
[错误] 无法在项目 my-program 上执行目标 org.jbehave:jbehave-maven-plugin:3.7.5:run-stories-as-embeddables (embeddable-stories):无法将故事作为可嵌入对象运行:NullPointerException -> [帮助1] org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.jbehave:jbehave-maven-plugin:3.7.5:run-stories-as-embeddables (embeddable-stories) on project my-program-test在org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) 在 org.apache.maven 的 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)。lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute( LifecycleStarter.java:161) 在 org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320) 在 org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) 在 org.apache.maven.cli.MavenCli .execute(MavenCli.java:537) 在 org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) 在 org.apache.maven.cli.MavenCli.main(MavenCli.java:141) 在太阳。 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 处 sun.reflect.DelegatingMethodAccessorImpl 处的 reflect.NativeMethodAccessorImpl.invoke0(Native Method)。在 org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) 在 org.codehaus 的 java.lang.reflect.Method.invoke(Method.java:597) 调用(DelegatingMethodAccessorImpl.java:25) .plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) 在 org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) 在 org.codehaus.plexus.classworlds.launcher.Launcher .main(Launcher.java:352) 原因:org.apache.maven.plugin.MojoFailureException: 无法在 org.apache 的 org.jbehave.mojo.RunStoriesAsEmbeddables.execute(RunStoriesAsEmbeddables.java:20) 中将故事作为可嵌入对象运行。 maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) ...还有 19 个原因:org.codehaus.plexus.util.AbstractScanner.setExcludes(AbstractScanner.java:314) 的 org.codehaus.plexus.util.AbstractScanner.normalizePattern(AbstractScanner.java:327) 的 java.lang.NullPointerException .jbehave.core.io.StoryFinder.scanDirectory(StoryFinder.java:218) at org.jbehave.core.io.StoryFinder.scan(StoryFinder.java:205) at org.jbehave.core.io.StoryFinder.findClassNames(StoryFinder .java:61) 在 org.jbehave.mojo.AbstractEmbedderMojo.classNames(AbstractEmbedderMojo.java:302) 在 org.jbehave.mojo.RunStoriesAsEmbeddables.execute(RunStoriesAsEmbeddables.java:18) ... 还有 21 个setExcludes(AbstractScanner.java:314) at org.jbehave.core.io.StoryFinder.scanDirectory(StoryFinder.java:218) at org.jbehave.core.io.StoryFinder.scan(StoryFinder.java:205) at org.jbehave .core.io.StoryFinder.findClassNames(StoryFinder.java:61) 在 org.jbehave.mojo.AbstractEmbedderMojo.classNames(AbstractEmbedderMojo.java:302) 在 org.jbehave.mojo.RunStoriesAsEmbeddables.execute(RunStoriesAsEmbeddables.java:18)。 .. 还有 21 个setExcludes(AbstractScanner.java:314) at org.jbehave.core.io.StoryFinder.scanDirectory(StoryFinder.java:218) at org.jbehave.core.io.StoryFinder.scan(StoryFinder.java:205) at org.jbehave .core.io.StoryFinder.findClassNames(StoryFinder.java:61) 在 org.jbehave.mojo.AbstractEmbedderMojo.classNames(AbstractEmbedderMojo.java:302) 在 org.jbehave.mojo.RunStoriesAsEmbeddables.execute(RunStoriesAsEmbeddables.java:18)。 .. 还有 21 个执行(RunStoriesAsEmbeddables.java:18)... 21 更多执行(RunStoriesAsEmbeddables.java:18)... 21 更多