0

我一直在尝试使用 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 更多

4

1 回答 1

0

基于此

Caused by: java.lang.NullPointerException at 
   org.codehaus.plexus.util.AbstractScanner.normalizePattern(AbstractScanner.java:327) at
   org.codehaus.plexus.util.AbstractScanner.setExcludes(AbstractScanner.java:314) at 

看起来您的排除模式配置已损坏。它看起来像这样:

<exclude>${exclude}</exclude>

未在您的属性中定义。您可以使用 Effective-pom 来确认是否所有属性都已正确扩展。

于 2013-11-01T17:39:18.743 回答