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 angelegtGiven ein Benutzer mit dem Namen <username>When der Benutzer angelegt wirdThen wird ein Benutzerobjekt zurückgegebenExamples:| username || iman |
DTO
java
public record User(String username) {}
Service
java
@Servicepublic class UserService { public User create(String username) { return new User(username); }}
Die Step-Definitionen
java
@Componentpublic 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