diff --git a/build.gradle b/build.gradle
index cef5ac569d5ab9d774fc7ff8cbe367b909b26c6a..4ae919156a0da760378a0dcb48f3b02d7a1d66d4 100644
--- a/build.gradle
+++ b/build.gradle
@@ -13,9 +13,9 @@ repositories {
 }
 
 dependencies {
-    testImplementation('org.junit.jupiter:junit-jupiter-api:5.7.2',
-            'org.hamcrest:hamcrest-library:2.2', 'net.obvj:junit-utils:1.3.1')
-    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.2'
+    testImplementation('org.junit.jupiter:junit-jupiter-api:5.8.1',
+            'org.assertj:assertj-core:3.21.0')
+    testRuntimeOnly('org.junit.jupiter:junit-jupiter-engine:5.8.1')
 }
 
 test {
@@ -24,4 +24,4 @@ test {
 
 application {
     mainClassName = "Main"
-}
\ No newline at end of file
+}
diff --git a/src/test/java/ByteGrayColorTest.java b/src/test/java/ByteGrayColorTest.java
index ddca387ebbc3eac44600779f4a13c3af49e89f9a..2f056266657273e624e9b39f4204649369570217 100644
--- a/src/test/java/ByteGrayColorTest.java
+++ b/src/test/java/ByteGrayColorTest.java
@@ -1,23 +1,60 @@
 import org.junit.jupiter.api.Test;
 
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.closeTo;
-import static org.hamcrest.Matchers.is;
+import static org.assertj.core.api.Assertions.*;
 
 public class ByteGrayColorTest {
   @Test
   public void testGetLuminosity_whenColorCreatedWithGrayLevel(){
     ByteGrayColor black = new ByteGrayColor(0);
     ByteGrayColor white = new ByteGrayColor(255);
-    assertThat(black.getLuminosity(), is(closeTo(0.,.0001)));
-    assertThat(white.getLuminosity(), is(closeTo(1.,.0001)));
+    assertThat(black.getLuminosity()).isCloseTo(0., within(.01));
+    assertThat(white.getLuminosity()).isCloseTo(1., within(.01));
   }
 
   @Test
   public void testGetLuminosity_whenColorCreatedWithLuminosity(){
     ByteGrayColor color1 = new ByteGrayColor(.25);
     ByteGrayColor color2 = new ByteGrayColor(.75);
-    assertThat(color1.getLuminosity(), is(closeTo(.25,.01)));
-    assertThat(color2.getLuminosity(), is(closeTo(.75,.01)));
+    assertThat(color1.getLuminosity()).isCloseTo(.25, within(.01));
+    assertThat(color2.getLuminosity()).isCloseTo(.75, within(.01));
+  }
+
+  @Test
+  public void testCompareTo_whenColorsCreatedWithGrayLevel(){
+    ByteGrayColor color1 = new ByteGrayColor(100);
+    ByteGrayColor color2 = new ByteGrayColor(150);
+    ByteGrayColor color3 = new ByteGrayColor(200);
+    ByteGrayColor sameGrayLevelAsColor1 = new ByteGrayColor(100);
+    assertThat(color1.compareTo(color2)).isNegative();
+    assertThat(color2.compareTo(color3)).isNegative();
+    assertThat(color1.compareTo(color3)).isNegative();
+    assertThat(color2.compareTo(color1)).isPositive();
+    assertThat(color1.compareTo(sameGrayLevelAsColor1)).isZero();
+    assertThat(color1.compareTo(color2)).isEqualTo(sameGrayLevelAsColor1.compareTo(color2));
+  }
+
+  @Test
+  public void testCompareTo_whenColorsCreatedWithLuminosity(){
+    ByteGrayColor color1 = new ByteGrayColor(0.20);
+    ByteGrayColor color2 = new ByteGrayColor(0.60);
+    ByteGrayColor color3 = new ByteGrayColor(0.80);
+    ByteGrayColor sameLuminosityAsColor1 = new ByteGrayColor(0.20);
+    assertThat(color1.compareTo(color2)).isNegative();
+    assertThat(color2.compareTo(color3)).isNegative();
+    assertThat(color1.compareTo(color3)).isNegative();
+    assertThat(color2.compareTo(color1)).isPositive();
+    assertThat(color1.compareTo(sameLuminosityAsColor1)).isZero();
+    assertThat(color1.compareTo(color2)).isEqualTo(sameLuminosityAsColor1.compareTo(color2));
+  }
+
+  @Test
+  public void testCompareTo_whenColorsCreatedWithLuminosityAndGrayLevel(){
+    ByteGrayColor color1 = new ByteGrayColor(0.);
+    ByteGrayColor color2 = new ByteGrayColor(150);
+    ByteGrayColor color3 = new ByteGrayColor(1.);
+    assertThat(color1.compareTo(color2)).isNegative();
+    assertThat(color2.compareTo(color3)).isNegative();
+    assertThat(color1.compareTo(color3)).isNegative();
+    assertThat(color2.compareTo(color1)).isPositive();
   }
 }
diff --git a/src/test/java/MatrixGrayImageTest.java b/src/test/java/MatrixGrayImageTest.java
index 0664e25844ec0df36fef9024d04ea814c08f741e..a08520d4a0e81f1facf617cc62e0b7d2f9cce847 100644
--- a/src/test/java/MatrixGrayImageTest.java
+++ b/src/test/java/MatrixGrayImageTest.java
@@ -1,23 +1,32 @@
 import org.junit.jupiter.api.Test;
 
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-
+import static org.assertj.core.api.Assertions.*;
+import static org.assertj.core.api.Assertions.assertThat;
 
 class MatrixGrayImageTest {
 
     @Test
-    void getWidth() {
-        assertThat(new MatrixGrayImage(0,0).getWidth(), is(equalTo(0)));
-        assertThat(new MatrixGrayImage(10,20).getWidth(), is(equalTo(10)));
-        assertThat(new MatrixGrayImage(400,300).getWidth(), is(equalTo(400)));
+    void testGetWidth() {
+        assertThat(new MatrixGrayImage(0,0).getWidth()).isEqualTo(0);
+        assertThat(new MatrixGrayImage(10,20).getWidth()).isEqualTo(10);
+        assertThat(new MatrixGrayImage(400,300).getWidth()).isEqualTo(400);
+    }
+
+    @Test
+    void testGetHeight() {
+        assertThat(new MatrixGrayImage(0,0).getHeight()).isEqualTo(0);
+        assertThat(new MatrixGrayImage(10,20).getHeight()).isEqualTo(20);
+        assertThat(new MatrixGrayImage(400,300).getHeight()).isEqualTo(300);
     }
 
     @Test
-    void getHeight() {
-        assertThat(new MatrixGrayImage(0,0).getHeight(), is(equalTo(0)));
-        assertThat(new MatrixGrayImage(10,20).getHeight(), is(equalTo(20)));
-        assertThat(new MatrixGrayImage(400,300).getHeight(), is(equalTo(300)));
+    void testGetPixel_whenPixelHasBeenSet() {
+        GrayColor grey1 = new ByteGrayColor(0.2);
+        GrayColor grey2 = new ByteGrayColor(0.8);
+        MatrixGrayImage image = new MatrixGrayImage(10, 10);
+        image.setPixel(grey1, 1, 1);
+        assertThat(image.getPixelGrayColor(1,1)).isEqualTo(grey1);
+        image.setPixel(grey2, 3, 9);
+        assertThat(image.getPixelGrayColor(3,9)).isEqualTo(grey2);
     }
 }
\ No newline at end of file