BDD ermöglicht es, fachliche Anforderungen direkt als ausführbare Tests zu formulieren. Dieser Post zeigt, wie man JBehave mit Spring 3 in einem minimalen Beispiel einsetzt.


Abhängigkeiten (Maven)

pom.xml

<dependencies>
<dependency>
<groupId>org.jbehave</groupId>
<artifactId>jbehave-spring</artifactId>
<version>5.2.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.1.0</version>
</dependency>
</dependencies>

Die Story

Stories werden in einfachem Englisch (oder Deutsch) verfasst und in src/test/resources/stories/ abgelegt.

Datei: create_user.story

Narrative:
Als Administrator möchte ich einen Benutzer anlegen,
um ihm Zugang zum System zu gewähren.
Scenario: Benutzer wird erfolgreich angelegt
Given ein Benutzer mit dem Namen <username>
When der Benutzer angelegt wird
Then wird ein Benutzerobjekt zurückgegeben
Examples:
| username |
| iman |

DTO

java

public record User(String username) {}

Service

java

@Service
public class UserService {
public User create(String username) {
return new User(username);
}
}

Die Step-Definitionen

java

@Component
public class UserSteps {
@Autowired
private UserService userService;
private String username;
private User result;
@Given("ein Benutzer mit dem Namen $username")
public void givenUsername(String username) {
this.username = username;
}
@When("der Benutzer angelegt wird")
public void whenUserIsCreated() {
result = userService.create(username);
}
@Then("wird ein Benutzerobjekt zurückgegeben")
public void thenUserObjectIsReturned() {
assertThat(result).isNotNull();
assertThat(result.username()).isEqualTo(username);
}
}

Spring-Konfiguration (Test)

java

@Configuration
@ComponentScan("ch.iman")
public class TestConfig {}

JBehave-Runner

java

@RunWith(JUnitStories.class)
public class UserStoryRunner extends JUnitStoriesWithSpring {
@Override
protected List<String> storyPaths() {
return List.of("stories/create_user.story");
}
@Override
public Configuration configuration() {
return new MostUsefulConfiguration()
.useStoryLoader(new LoadFromClasspath(getClass()))
.useStoryReporterBuilder(new StoryReporterBuilder().withFormats(Format.CONSOLE));
}
@Override
public InjectableStepsFactory stepsFactory() {
ApplicationContext ctx = new AnnotationConfigApplicationContext(TestConfig.class);
return new SpringStepsFactory(configuration(), ctx);
}
}

Hinterlasse einen Kommentar

I’m Iman

Mein Name ist Iman Dabbaghi. Ich arbeite als Senior Software Engineer in der Schweiz. Außerdem interessiere ich mich sehr für gewaltfreie Kommunikation, Bachata-Tanz und Musik sowie fürs die Persönlichkeitsentwicklung.

Ich habe einen Masterabschluss in Informatik von der Universität Freiburg in Deutschland, bin Spring/Java Certified Professional (OCP), Certified Professional for Software Architecture (CPSA-F) und ein lebenslanger Lernender 🎓.

EN:

My name is Iman Dabbaghi. I work as a Senior Software Engineer in Switzerland. I am also very interessted in nonviolent communication, Bachata dance and music and also for personal development.

I hold a masters degree in computer science from the university of Freiburg in Germany, am a Spring / Java Certified Professional (OCP), Certified Software Architecture (CPSA-F) and Life Long Learner🎓

Let’s connect