diff --git a/modules/bitcoinsuite-chronik-client/src/lib.rs b/modules/bitcoinsuite-chronik-client/src/lib.rs
--- a/modules/bitcoinsuite-chronik-client/src/lib.rs
+++ b/modules/bitcoinsuite-chronik-client/src/lib.rs
@@ -465,3 +465,46 @@
         Ok(())
     }
 }
+
+#[macro_export]
+macro_rules! assert_status_code_eq {
+    ($result:expr, $expected_status:expr) => {
+        match $result {
+            Ok(_) => {
+                panic!(
+                    "Expected HTTP error response with status code {}, but \
+                     the request succeeded",
+                    $expected_status
+                );
+            }
+            Err(report) => {
+                let report_debug = format!("{:?}", report);
+
+                let err =
+                    report.downcast::<ChronikClientError>().expect(&format!(
+                        "Expected a Chronik client error but got a different \
+                         error {}",
+                        report_debug
+                    ));
+
+                let status_code = match err {
+                    ChronikClientError::ChronikError {
+                        status_code, ..
+                    } => status_code,
+                    other => panic!(
+                        "Expected a ChronikError with HTTP status code, but \
+                         got different variant: {:?}",
+                        other
+                    ),
+                };
+
+                assert_eq!(
+                    status_code, $expected_status,
+                    "HTTP status code assertion failed: expected {}, received \
+                     {}",
+                    $expected_status, status_code
+                );
+            }
+        }
+    };
+}
diff --git a/modules/bitcoinsuite-chronik-client/tests/block_and_blocks.rs b/modules/bitcoinsuite-chronik-client/tests/block_and_blocks.rs
--- a/modules/bitcoinsuite-chronik-client/tests/block_and_blocks.rs
+++ b/modules/bitcoinsuite-chronik-client/tests/block_and_blocks.rs
@@ -10,6 +10,7 @@
 use abc_rust_error::Result;
 use async_trait::async_trait;
 use bitcoinsuite_chronik_client::{
+    assert_status_code_eq,
     handler::{IpcHandler, IpcReader},
     test_runner::{handle_test_info, spin_child_process},
     ChronikClient, ChronikClientError,
@@ -117,22 +118,7 @@
                             )
                             .await;
 
-                            let err = result
-                                .unwrap_err()
-                                .downcast::<ChronikClientError>()?;
-
-                            let status_code = match err {
-                                ChronikClientError::ChronikError {
-                                    status_code: e,
-                                    ..
-                                } => e,
-                                _ => panic!(
-                                    "ChronikClientError should be raised, but
-                                     hasn't"
-                                ),
-                            };
-
-                            assert_eq!(status_code, 400);
+                            assert_status_code_eq!(result, 400);
                         }
 
                         // Gives us the block at 10 higher
@@ -238,22 +224,7 @@
                             )
                             .await;
 
-                            let err = result
-                                .unwrap_err()
-                                .downcast::<ChronikClientError>()?;
-
-                            let status_code = match err {
-                                ChronikClientError::ChronikError {
-                                    status_code: e,
-                                    ..
-                                } => e,
-                                _ => panic!(
-                                    "ChronikClientError should be raised, but
-                                     hasn't"
-                                ),
-                            };
-
-                            assert_eq!(status_code, 404);
+                            assert_status_code_eq!(result, 404);
 
                             // blocks does not throw error if asked for parked
                             // block, but also does not return it
@@ -409,22 +380,7 @@
                             )
                             .await;
 
-                            let err = result
-                                .unwrap_err()
-                                .downcast::<ChronikClientError>()?;
-
-                            let status_code = match err {
-                                ChronikClientError::ChronikError {
-                                    status_code: e,
-                                    ..
-                                } => e,
-                                _ => panic!(
-                                    "ChronikClientError should be raised, but
-                                     hasn't"
-                                ),
-                            };
-
-                            assert_eq!(status_code, 404);
+                            assert_status_code_eq!(result, 404);
 
                             // blocks does not throw error if asked for
                             // invalidated block, but also does not return it