JBehaveの使用方法に関する多くの記事を読みましたが、機能させることはできません。これまでに行った手順は次のとおりです。
com.wmi.tutorials.bdd.stack.specs
というパッケージを作成しましたそれでも、私はそれを動作/実行させることができません! =(
ストーリーファイル:
Narrative:
In order to learn to with JBehave using Eclipse
As a junior Java developer though senior in .Net and in BDD
I want to define the behaviour of a custom stack
Scenario: I Push an item onto the stack
Given I have an empty stack
When I Push an item 'orange'
Then I should count 1
Scenario: I pop from the stack
Given I have an empty stack
When I Push an item 'Apple'
And I pop the stack
Then I should count 0
ストーリークラス
package com.wmi.tutorials.bdd.stack.specs
import org.jbehave.core.configuration.MostUsefulConfiguration;
import org.jbehave.core.junit.JUnitStory;
public class StackBehaviourStory extends JUnitStory {
@Override
public Configuration configuration() { return new MostUsefulConfiguration(); }
@Override
public InjectableStepsFactory stepsFactory() {
return new InstanceStepsFactory(configuration()
, new StackBehaviourSteps());
}
}
ステップクラス
package com.wmi.tutorials.bdd.stack.specs
import org.jbehave.core.annotations.Given;
import org.jbehave.core.annotations.Named;
import org.jbehave.core.annotations.Then;
import org.jbehave.core.annotations.When;
import org.jbehave.core.junit.Assert;
public class StackBehaviourSteps {
@Given("I have an empty stack")
public void givenIHaveAnEmptyStack() { stack = new CustomStack(); }
@When("I Push an item $item")
public void whenIPushAnItem(@Named("item") String item) { stack.Push(item); }
@Then("I should count $expected")
public void thenIShouldCount(@Named("expected") int expected) {
int actual = stack.count();
if (actual != expected)
throw new RuntimeException("expected:"+expected+";actual:"+actual);
}
}
現在、JUnit、Google App Engineを使用するために必要なすべてのものでEclipse Kepler(4.3)JEEを使用しています。もちろん、JBehaveはEclipse JBehaveインストールチュートリアルに従って正しくインストールされます。
私はそれを動作させることができません。それでは、Eclipse、JBehave、JUnitを使用してどのように正しく動作させることができますか?
jbehave Getting Started
チュートリアル、ストーリーの実行セクションは次のように述べています:[...] ICanToggleACell.Javaクラスはそれ自体がJUnitテストとして実行されます。
これは、ビルドパスにJUnitライブラリが必要であることを意味します。
Eclipseの使用:
ICanToggleACell.Java
クラスを右クリックして[実行]をクリックし、[JUnitテスト]をクリックしますしたがって、これは上記のコードの場合と同じです。 StackBehaviourStory.Java
クラスは、適切なライブラリをJavaビルドパスに追加した後、JUnitテストとして実行する必要があります。
私はここでパーティーに遅れていることを知っていますが、これは私が多くの苦痛を救うので、これが私が1週間前に持っていたと思う情報であるので、私は投稿しています。私はBDDのアイデアに非常に興味がありますが、残念ながらJBehaveのドキュメントは、特にMavenの統合に関しては少し悪夢であると感じています。さらに、彼らのウェブサイトと他の場所の両方で私が見つけたコードの多くは機能しませんでした。試行錯誤と多くのチュートリアルを通じて、次のことをまとめることができました。 MavenとEclipseの両方で実行され、ストーリーをステップファイルにマップする単一のバインディングクラスを持ち、src/test/resourcesにあるストーリーファイルを見つけることができます。
作業中のpomファイルは次のとおりです。
<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.projectvalis.st1</groupId>
<artifactId>st1</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>st1</name>
<url>http://maven.Apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerArgument></compilerArgument>
</configuration>
</plugin>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${failsafe.and.surefire.version}</version>
<executions>
<execution>
<id>integration-test</id>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
<configuration>
<includes>
<include>**/*Test.Java</include>
</includes>
</configuration>
</plugin>
<plugin>
<groupId>org.jbehave</groupId>
<artifactId>jbehave-maven-plugin</artifactId>
<version>4.0.2</version>
<executions>
<execution>
<id>run-stories-as-embeddables</id>
<phase>integration-test</phase>
<configuration>
<includes>
<include>**/*Test.Java</include>
</includes>
<ignoreFailureInStories>false</ignoreFailureInStories>
<ignoreFailureInView>false</ignoreFailureInView>
<systemProperties>
<property>
<name>Java.awt.headless</name>
<value>true</value>
</property>
</systemProperties>
</configuration>
<goals>
<goal>run-stories-as-embeddables</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>org.Apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>org.jbehave</groupId>
<artifactId>jbehave-core</artifactId>
<version>4.0.2</version>
</dependency>
</dependencies>
</project>
サンプルストーリーファイルはこちら
Narrative:
In order to work with files to compress
As a guy who wants to win a bet with cameron
I want to ensure files are ingested and processed in the manner in which the
methods in the ingest class purport to process them.
Scenario: Simple test to give JBehave a test drive
Given a file, a.log
When the caller loads the file as a byte array
Then the byte array that is returned contains the correct number of bytes.
ここにサンプルのステップファイルがあります
package com.projectvalis.compUtils.tests.ingest;
import Java.io.File;
import org.jbehave.core.annotations.Given;
import org.jbehave.core.annotations.Named;
import org.jbehave.core.annotations.Then;
import org.jbehave.core.annotations.When;
import org.jbehave.core.steps.Steps;
import org.junit.Assert;
import com.projectvalis.compUtils.util.fileIO.Ingest;
/**
* BDD tests for the ingest class
* @author funktapuss
*
*/
public class LoadByteSteps extends Steps {
private String fNameS;
private byte[] byteARR;
@Given("a file, $filename")
public void setFileName(@Named("filename") String filename) {
File file = new File(getClass().getResource("/" + filename).getFile());
fNameS = file.getPath();
}
@When("the caller loads the file as a byte array")
public void loadFile() {
byteARR = Ingest.loadFile(fNameS);
}
@Then("the byte array that is returned contains the "
+ "correct number of bytes.")
public void checkArrSize() {
File file = new File(fNameS);
Assert.assertTrue(
"loading error - "
+ "the file and the resultant byte array are different sizes!",
(long)byteARR.length == file.length());
}
}
そして、これが一般的なランナーです
package com.projectvalis.compUtils.tests.runner;
import Java.util.ArrayList;
import Java.util.Arrays;
import Java.util.List;
import org.jbehave.core.configuration.Configuration;
import org.jbehave.core.configuration.MostUsefulConfiguration;
import org.jbehave.core.io.CodeLocations;
import org.jbehave.core.io.LoadFromClasspath;
import org.jbehave.core.io.StoryFinder;
import org.jbehave.core.junit.JUnitStories;
import org.jbehave.core.reporters.Format;
import org.jbehave.core.reporters.StoryReporterBuilder;
import org.jbehave.core.steps.InjectableStepsFactory;
import org.jbehave.core.steps.InstanceStepsFactory;
import org.jbehave.core.steps.Steps;
import com.projectvalis.compUtils.tests.ingest.LoadByteSteps;
/**
* generic binder for all JBehave tests. Binds all the story files to the
* step files. works for both Eclipse and Maven command line build.
* @author funktapuss
*
*/
public class JBehaveRunner_Test extends JUnitStories {
@Override
public Configuration configuration() {
return new MostUsefulConfiguration()
.useStoryLoader(
new LoadFromClasspath(this.getClass().getClassLoader()))
.useStoryReporterBuilder(
new StoryReporterBuilder()
.withDefaultFormats()
.withFormats(Format.HTML, Format.CONSOLE)
.withRelativeDirectory("jbehave-report")
);
}
@Override
public InjectableStepsFactory stepsFactory() {
ArrayList<Steps> stepFileList = new ArrayList<Steps>();
stepFileList.add(new LoadByteSteps());
return new InstanceStepsFactory(configuration(), stepFileList);
}
@Override
protected List<String> storyPaths() {
return new StoryFinder().
findPaths(CodeLocations.codeLocationFromClass(
this.getClass()),
Arrays.asList("**/*.story"),
Arrays.asList(""));
}
}
ランナーはsrc/test/Java // tests.runnerに住んでいます。取り込みテストはsrc/test/Java // tests.ingestにあります。ストーリーファイルはsrc/test/resources/storiesにあります。
私が知る限り、JBehaveには多くのオプションがあるため、これが唯一の方法ではありません。これを、すぐに実行できるテンプレートのように扱ってください。
完全なソースは github にあります。
私の場合、StepsからStepsクラスを拡張しました(jbehaveコアから)
私はJunitStoryをJunitStoriesに更新しましたが、それはうまくいきました
パブリッククラスStackBehaviourStoryはJUnitStoryを拡張します---> JunitStories