diff --git a/testing-modules/mockito/pom.xml b/testing-modules/mockito/pom.xml
index cdd73e6efe..d9478d5bd1 100644
--- a/testing-modules/mockito/pom.xml
+++ b/testing-modules/mockito/pom.xml
@@ -51,7 +51,6 @@
org.hamcrest
java-hamcrest
${hamcrest.version}
- test
diff --git a/testing-modules/mockito/src/main/java/org/baeldung/hamcrest/custommatchers/IsDivisibleBy.java b/testing-modules/mockito/src/main/java/org/baeldung/hamcrest/custommatchers/IsDivisibleBy.java
new file mode 100644
index 0000000000..65a183f273
--- /dev/null
+++ b/testing-modules/mockito/src/main/java/org/baeldung/hamcrest/custommatchers/IsDivisibleBy.java
@@ -0,0 +1,28 @@
+package org.baeldung.hamcrest.custommatchers;
+
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+import org.hamcrest.TypeSafeMatcher;
+
+public class IsDivisibleBy extends TypeSafeMatcher {
+
+ private Integer divider;
+
+ private IsDivisibleBy(Integer divider) {
+ this.divider = divider;
+ }
+
+ @Override
+ protected boolean matchesSafely(Integer dividend) {
+ return ((dividend % divider) == 0);
+ }
+
+ @Override
+ public void describeTo(Description description) {
+ description.appendText("divisible by " + divider);
+ }
+
+ public static Matcher divisibleBy(Integer divider) {
+ return new IsDivisibleBy(divider);
+ }
+}
diff --git a/testing-modules/mockito/src/main/java/org/baeldung/hamcrest/custommatchers/IsOnlyNumbers.java b/testing-modules/mockito/src/main/java/org/baeldung/hamcrest/custommatchers/IsOnlyNumbers.java
new file mode 100644
index 0000000000..7d95fbf34a
--- /dev/null
+++ b/testing-modules/mockito/src/main/java/org/baeldung/hamcrest/custommatchers/IsOnlyNumbers.java
@@ -0,0 +1,27 @@
+package org.baeldung.hamcrest.custommatchers;
+
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+import org.hamcrest.TypeSafeMatcher;
+
+public class IsOnlyNumbers extends TypeSafeMatcher {
+
+ @Override
+ protected boolean matchesSafely(String s) {
+ try {
+ Integer.parseInt(s);
+ return true;
+ } catch (NumberFormatException nfe) {
+ return false;
+ }
+ }
+
+ @Override
+ public void describeTo(Description description) {
+ description.appendText("only numbers");
+ }
+
+ public static Matcher onlyNumbers() {
+ return new IsOnlyNumbers();
+ }
+}
\ No newline at end of file
diff --git a/testing-modules/mockito/src/main/java/org/baeldung/hamcrest/custommatchers/IsUppercase.java b/testing-modules/mockito/src/main/java/org/baeldung/hamcrest/custommatchers/IsUppercase.java
new file mode 100644
index 0000000000..859e7006b7
--- /dev/null
+++ b/testing-modules/mockito/src/main/java/org/baeldung/hamcrest/custommatchers/IsUppercase.java
@@ -0,0 +1,22 @@
+package org.baeldung.hamcrest.custommatchers;
+
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+import org.hamcrest.TypeSafeMatcher;
+
+public class IsUppercase extends TypeSafeMatcher {
+
+ @Override
+ protected boolean matchesSafely(String s) {
+ return s.equals(s.toUpperCase());
+ }
+
+ @Override
+ public void describeTo(Description description) {
+ description.appendText("all uppercase");
+ }
+
+ public static Matcher uppercase() {
+ return new IsUppercase();
+ }
+}
\ No newline at end of file
diff --git a/testing-modules/mockito/src/test/java/org/baeldung/hamcrest/HamcrestCustomUnitTest.java b/testing-modules/mockito/src/test/java/org/baeldung/hamcrest/HamcrestCustomUnitTest.java
new file mode 100644
index 0000000000..4d6ff8503f
--- /dev/null
+++ b/testing-modules/mockito/src/test/java/org/baeldung/hamcrest/HamcrestCustomUnitTest.java
@@ -0,0 +1,50 @@
+package org.baeldung.hamcrest;
+
+import org.junit.Test;
+
+import static org.baeldung.hamcrest.custommatchers.IsDivisibleBy.divisibleBy;
+import static org.baeldung.hamcrest.custommatchers.IsOnlyNumbers.onlyNumbers;
+import static org.baeldung.hamcrest.custommatchers.IsUppercase.uppercase;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.not;
+
+public class HamcrestCustomUnitTest {
+
+ @Test
+ public final void givenAString_whenIsOnlyNumbers_thenCorrect() {
+ String numbers = "123";
+
+ assertThat(numbers, is(onlyNumbers()));
+ }
+
+ @Test
+ public final void givenAString_whenIsNotOnlyNumbers_thenCorrect() {
+ String numbers = "123ABC";
+
+ assertThat(numbers, is(not(onlyNumbers())));
+ }
+
+ @Test
+ public final void givenAString_whenIsUppercase_thenCorrect() {
+ String uppercaseWord = "HELLO";
+
+ assertThat(uppercaseWord, is(uppercase()));
+ }
+
+ @Test
+ public final void givenAnEvenInteger_whenDivisibleByTwo_thenCorrect() {
+ Integer ten = 10;
+ Integer two = 2;
+
+ assertThat(ten, is(divisibleBy(two)));
+ }
+
+ @Test
+ public final void givenAnOddInteger_whenNotDivisibleByTwo_thenCorrect() {
+ Integer eleven = 11;
+ Integer two = 2;
+
+ assertThat(eleven, is(not(divisibleBy(two))));
+ }
+}