2017-05-16 3 views
0

Ich habe meine Jbehave-Test-Projekt konfiguriert und hat eine .story-Datei im Projekt. Ich habe versucht, die Konfigurationseinstellungen wie ich im Internet gefunden, aber wenn ich die Tests laufen, es gibt mir einen Fehler, der Stack-Trace wird unterGeschichte nicht gefunden Fehler beim Ausführen eines Tests mit Jbehave Junit

org.jbehave.core.io.StoryResourceNotFound: Story path 'D:\AutoRegression8.8\NewProject\src\BusinessCase1.story' not found by class loader [email protected] 
at org.jbehave.core.io.LoadFromClasspath.resourceAsStream(LoadFromClasspath.java:80) 
at org.jbehave.core.io.LoadFromClasspath.loadResourceAsText(LoadFromClasspath.java:65) 
at org.jbehave.core.io.LoadFromClasspath.loadStoryAsText(LoadFromClasspath.java:74) 
at org.jbehave.core.embedder.PerformableTree.storyOfPath(PerformableTree.java:261) 
at org.jbehave.core.embedder.StoryManager.storyOfPath(StoryManager.java:61) 
at org.jbehave.core.embedder.StoryManager.storiesOf(StoryManager.java:92) 
at org.jbehave.core.embedder.StoryManager.runStoriesAsPaths(StoryManager.java:86) 
at org.jbehave.core.embedder.Embedder.runStoriesAsPaths(Embedder.java:213) 
at org.jbehave.core.junit.JUnitStories.run(JUnitStories.java:20) 
at TestRunner.run(TestRunner.java:59) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) 
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:309) 
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 

gezeigt Allerdings habe ich meine .story Datei in der gleichen Position bei dem der Code versucht es zu finden. Um die .story Datei zu finden, habe ich den folgenden Code verwendet:

@Override 
protected List<String> storyPaths() { 
/* 
* return new StoryFinder().findPaths(
* CodeLocations.codeLocationFromClass(this.getClass()), "**.story", 
* ""); 
*/ 
String placetoSearch = System.getProperty("user.dir") + "\\src\\BusinessCase1.story"; 
/*return new StoryFinder().findPaths(CodeLocations.codeLocationFromClass(this.getClass()), placetoSearch, "");*/ 

return Arrays 
    .asList(placetoSearch); 

} 

Jede Hilfe oder Referenz in dieser Hinsicht würde geschätzt.

Antwort

1

Es gibt einen Unterschied zwischen der Suche nach einer Datei und der Suche nach einer Ressource.

JBehave verwendet den Classloader, den Sie eingerichtet haben, um nach der Story als Ressource zu suchen. Eine Ressource ist normalerweise Teil der Pakete, die Sie ausführen. Das bedeutet, dass ein Dateiname relativ zum Stamm der Klassen und nicht ein absoluter Pfad benötigt wird.

(Wenn Sie myClass.getResource() eher verwendet haben als myClassLoader.getResource() es wäre zu Ihrer Klasse relativ sein.)

Sie auch schlitzt Unix-Stil verwenden können, wenn Sie wollen. Versuchen Sie "/BusinessCase1.story" als den Dateinamen.

Verwandte Themen