diff --git a/testing-modules/README.md b/testing-modules/README.md
deleted file mode 100644
index c6098d1210..0000000000
--- a/testing-modules/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-## Testing Modules
-
-This is an aggregator module containing multiple modules focused on testing libraries.
diff --git a/testing-modules/pom.xml b/testing-modules/pom.xml
index 0416423239..fd4a13d026 100644
--- a/testing-modules/pom.xml
+++ b/testing-modules/pom.xml
@@ -31,7 +31,7 @@
rest-assured
rest-testing
selenium-junit-testng
- spring-testing
+ spring-testing
spring-testing-2
test-containers
testing-assertions
@@ -41,9 +41,10 @@
junit-5-advanced
xmlunit-2
junit-4
- testing-libraries
- testing-libraries-2
+ testing-libraries
+ testing-libraries-2
powermock
+ zerocode
diff --git a/testing-modules/zerocode/pom.xml b/testing-modules/zerocode/pom.xml
new file mode 100644
index 0000000000..9d765e6cb4
--- /dev/null
+++ b/testing-modules/zerocode/pom.xml
@@ -0,0 +1,102 @@
+
+
+ 4.0.0
+
+ testing-modules
+ com.baeldung
+ 1.0.0-SNAPSHOT
+
+
+ zerocode
+ 1.0-SNAPSHOT
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${spring.boot.version}
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ ${spring.boot.version}
+ test
+
+
+
+
+ org.jsmart
+ zerocode-tdd
+ 1.3.27
+ test
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+ it
+
+
+
+
+ pre-integration-test
+
+ start
+
+
+ ${skip.it}
+
+
+
+ post-integration-test
+
+ stop
+
+
+ ${skip.it}
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+ 3.0.0-M5
+
+ ${skip.it}
+
+
+
+ org.apache.maven.surefire
+ surefire-junit47
+ 3.0.0-M5
+
+
+
+
+
+ integration-test
+ verify
+
+
+
+
+
+
+
+
+ UTF-8
+ 8
+ 8
+ 2.4.2
+ true
+
+
+
diff --git a/testing-modules/zerocode/src/main/java/com/baeldung/zerocode/User.java b/testing-modules/zerocode/src/main/java/com/baeldung/zerocode/User.java
new file mode 100644
index 0000000000..3a2a853220
--- /dev/null
+++ b/testing-modules/zerocode/src/main/java/com/baeldung/zerocode/User.java
@@ -0,0 +1,31 @@
+package com.baeldung.zerocode;
+
+public class User {
+ private String id;
+ private String firstName;
+ private String lastName;
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+}
diff --git a/testing-modules/zerocode/src/main/java/com/baeldung/zerocode/ZerocodeApplication.java b/testing-modules/zerocode/src/main/java/com/baeldung/zerocode/ZerocodeApplication.java
new file mode 100644
index 0000000000..3218e97400
--- /dev/null
+++ b/testing-modules/zerocode/src/main/java/com/baeldung/zerocode/ZerocodeApplication.java
@@ -0,0 +1,38 @@
+package com.baeldung.zerocode;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+@SpringBootApplication
+@RestController
+@RequestMapping("/api/users")
+public class ZerocodeApplication {
+ private List users = new ArrayList<>();
+
+ public static void main(String[] args) {
+ SpringApplication.run(ZerocodeApplication.class, args);
+ }
+
+ @PostMapping
+ public ResponseEntity create(@RequestBody User user) {
+ if (!StringUtils.hasText(user.getFirstName())) {
+ return new ResponseEntity("firstName can't be empty!", HttpStatus.BAD_REQUEST);
+ }
+ if (!StringUtils.hasText(user.getLastName())) {
+ return new ResponseEntity("lastName can't be empty!", HttpStatus.BAD_REQUEST);
+ }
+ user.setId(UUID.randomUUID()
+ .toString());
+ users.add(user);
+ return new ResponseEntity(user, HttpStatus.CREATED);
+ }
+
+}
diff --git a/testing-modules/zerocode/src/test/java/com/baeldung/zerocode/rest/UserEndpointIT.java b/testing-modules/zerocode/src/test/java/com/baeldung/zerocode/rest/UserEndpointIT.java
new file mode 100644
index 0000000000..cc461fd0fc
--- /dev/null
+++ b/testing-modules/zerocode/src/test/java/com/baeldung/zerocode/rest/UserEndpointIT.java
@@ -0,0 +1,18 @@
+package com.baeldung.zerocode.rest;
+
+import org.jsmart.zerocode.core.domain.Scenario;
+import org.jsmart.zerocode.core.domain.TargetEnv;
+import org.jsmart.zerocode.core.runner.ZeroCodeUnitRunner;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(ZeroCodeUnitRunner.class)
+@TargetEnv("rest_api.properties")
+public class UserEndpointIT {
+
+ @Test
+ @Scenario("rest/user_create_test.json")
+ public void test_user_creation_endpoint() {
+ }
+
+}
diff --git a/testing-modules/zerocode/src/test/resources/rest/user_create_test.json b/testing-modules/zerocode/src/test/resources/rest/user_create_test.json
new file mode 100644
index 0000000000..0e8ee66196
--- /dev/null
+++ b/testing-modules/zerocode/src/test/resources/rest/user_create_test.json
@@ -0,0 +1,39 @@
+{
+ "scenarioName": "test user creation endpoint",
+ "steps": [
+ {
+ "name": "test_successful_creation",
+ "url": "/api/users",
+ "method": "POST",
+ "request": {
+ "body": {
+ "firstName": "John",
+ "lastName": "Doe"
+ }
+ },
+ "verify": {
+ "status": 201,
+ "body": {
+ "id": "$NOT.NULL",
+ "firstName": "John",
+ "lastName": "Doe"
+ }
+ }
+ },
+ {
+ "name": "test_firstname_validation",
+ "url": "/api/users",
+ "method": "POST",
+ "request": {
+ "body": {
+ "firstName": "",
+ "lastName": "Doe"
+ }
+ },
+ "assertions": {
+ "status": 400,
+ "rawBody": "firstName can't be empty!"
+ }
+ }
+ ]
+}
diff --git a/testing-modules/zerocode/src/test/resources/rest_api.properties b/testing-modules/zerocode/src/test/resources/rest_api.properties
new file mode 100644
index 0000000000..724042ade7
--- /dev/null
+++ b/testing-modules/zerocode/src/test/resources/rest_api.properties
@@ -0,0 +1,3 @@
+web.application.endpoint.host=http://localhost
+web.application.endpoint.port=8080
+web.application.endpoint.context=
\ No newline at end of file