diff --git a/Package.resolved b/Package.resolved
index fba7b308f7eec3bb9d3c4ad7391cd8369efd7900..25d429cff7a6313b3ab32cbc0098a6df1097d4dc 100644
--- a/Package.resolved
+++ b/Package.resolved
@@ -32,8 +32,8 @@
       "kind" : "remoteSourceControl",
       "location" : "https://github.com/pointfreeco/xctest-dynamic-overlay",
       "state" : {
-        "revision" : "50a70a9d3583fe228ce672e8923010c8df2deddd",
-        "version" : "0.2.1"
+        "revision" : "30314f1ece684dd60679d598a9b89107557b67d9",
+        "version" : "0.4.1"
       }
     }
   ],
diff --git a/Package.swift b/Package.swift
index 066d801f030e5a985edfdd747c82ec71ada20e22..741045ab6d400bac40d895ff9d1083bd4a7ad2ad 100644
--- a/Package.swift
+++ b/Package.swift
@@ -14,77 +14,47 @@ let package = Package(
     .macOS(.v12),
   ],
   products: [
-    .library(
-      name: "XXModels",
-      targets: ["XXModels"]
-    ),
-    .library(
-      name: "XXLegacyDatabaseMigrator",
-      targets: ["XXLegacyDatabaseMigrator"]
-    ),
-    .library(
-      name: "XXDatabase",
-      targets: ["XXDatabase"]
-    ),
+    .library(name: "XXModels", targets: ["XXModels"]),
+    .library(name: "XXLegacyDatabaseMigrator", targets: ["XXLegacyDatabaseMigrator"]),
+    .library(name: "XXDatabase", targets: ["XXDatabase"]),
   ],
   dependencies: [
-    .package(
-      url: "https://github.com/groue/GRDB.swift",
-      .upToNextMajor(from: "5.24.0")
-    ),
-    .package(
-      url: "https://github.com/pointfreeco/swift-custom-dump.git",
-      .upToNextMajor(from: "0.4.0")
-    ),
-    .package(
-      url: "https://github.com/pointfreeco/swift-snapshot-testing.git",
-      .upToNextMajor(from: "1.9.0")
-    ),
+    .package(url: "https://github.com/groue/GRDB.swift", .upToNextMajor(from: "5.24.0")),
+    .package(url: "https://github.com/pointfreeco/swift-custom-dump.git", .upToNextMajor(from: "0.4.0")),
+    .package(url: "https://github.com/pointfreeco/swift-snapshot-testing.git", .upToNextMajor(from: "1.9.0")),
+    .package(url: "https://github.com/pointfreeco/xctest-dynamic-overlay.git", .upToNextMajor(from: "0.4.1")),
   ],
   targets: [
     .target(
       name: "XXModels",
+      dependencies: [
+        .product(name: "XCTestDynamicOverlay", package: "xctest-dynamic-overlay"),
+      ],
       swiftSettings: swiftSettings
     ),
     .testTarget(
       name: "XXModelsTests",
       dependencies: [
-        .target(
-          name: "XXModels"
-        ),
+        .target(name: "XXModels"),
       ],
       swiftSettings: swiftSettings
     ),
     .target(
       name: "XXLegacyDatabaseMigrator",
       dependencies: [
-        .target(
-          name: "XXDatabase"
-        ),
-        .target(
-          name: "XXModels"
-        ),
-        .product(
-          name: "GRDB",
-          package: "GRDB.swift"
-        ),
+        .target(name: "XXDatabase"),
+        .target(name: "XXModels"),
+        .product(name: "GRDB", package: "GRDB.swift"),
+        .product(name: "XCTestDynamicOverlay", package: "xctest-dynamic-overlay"),
       ],
       swiftSettings: swiftSettings
     ),
     .testTarget(
       name: "XXLegacyDatabaseMigratorTests",
       dependencies: [
-        .target(
-          name: "XXLegacyDatabaseMigrator"
-        ),
-        .product(
-          name: "CustomDump",
-          package: "swift-custom-dump"
-        ),
-        .product(
-          name: "SnapshotTesting",
-          package: "swift-snapshot-testing"
-        ),
+        .target(name: "XXLegacyDatabaseMigrator"),
+        .product(name: "CustomDump", package: "swift-custom-dump"),
+        .product(name: "SnapshotTesting", package: "swift-snapshot-testing"),
       ],
       exclude: [
         "__Snapshots__",
@@ -100,26 +70,16 @@ let package = Package(
     .target(
       name: "XXDatabase",
       dependencies: [
-        .target(
-          name: "XXModels"
-        ),
-        .product(
-          name: "GRDB",
-          package: "GRDB.swift"
-        ),
+        .target(name: "XXModels"),
+        .product(name: "GRDB", package: "GRDB.swift"),
       ],
       swiftSettings: swiftSettings
     ),
     .testTarget(
       name: "XXDatabaseTests",
       dependencies: [
-        .target(
-          name: "XXDatabase"
-        ),
-        .product(
-          name: "CustomDump",
-          package: "swift-custom-dump"
-        ),
+        .target(name: "XXDatabase"),
+        .product(name: "CustomDump", package: "swift-custom-dump"),
       ],
       swiftSettings: swiftSettings
     ),
diff --git a/Sources/XXLegacyDatabaseMigrator/Migrator.swift b/Sources/XXLegacyDatabaseMigrator/Migrator.swift
index 2e15273b93a69c2de134d34f4a1f5aae1a73e70d..eacfb191ffbfe603556b871c6f8a6b583ee3d795 100644
--- a/Sources/XXLegacyDatabaseMigrator/Migrator.swift
+++ b/Sources/XXLegacyDatabaseMigrator/Migrator.swift
@@ -70,7 +70,11 @@ extension Migrator {
 }
 
 #if DEBUG
+import XCTestDynamicOverlay
+
 extension Migrator {
-  public static let failing = Migrator { _, _, _, _ in fatalError() }
+  public static let unimplemented = Migrator(
+    run: XCTUnimplemented("\(Self.self)")
+  )
 }
 #endif
diff --git a/Sources/XXModels/Database.swift b/Sources/XXModels/Database.swift
index 7b20c22db659110c53a08fb1bcbfb895878dbf77..f73b8cc5bf8b43ca380393cb73076fa4cb976990 100644
--- a/Sources/XXModels/Database.swift
+++ b/Sources/XXModels/Database.swift
@@ -177,37 +177,37 @@ public struct Database {
 
 #if DEBUG
 extension Database {
-  static public let failing = Database(
-    fetchChatInfos: .failing(),
-    fetchChatInfosPublisher: .failing(),
-    fetchContacts: .failing(),
-    fetchContactsPublisher: .failing(),
-    saveContact: .failing(),
-    bulkUpdateContacts: .failing(),
-    deleteContact: .failing(),
-    fetchContactChatInfos: .failing(),
-    fetchContactChatInfosPublisher: .failing(),
-    fetchGroups: .failing(),
-    fetchGroupsPublisher: .failing(),
-    saveGroup: .failing(),
-    deleteGroup: .failing(),
-    fetchGroupChatInfos: .failing(),
-    fetchGroupChatInfosPublisher: .failing(),
-    fetchGroupInfos: .failing(),
-    fetchGroupInfosPublisher: .failing(),
-    saveGroupMember: .failing(),
-    deleteGroupMember: .failing(),
-    fetchMessages: .failing(),
-    fetchMessagesPublisher: .failing(),
-    saveMessage: .failing(),
-    bulkUpdateMessages: .failing(),
-    deleteMessage: .failing(),
-    deleteMessages: .failing(),
-    fetchFileTransfers: .failing(),
-    fetchFileTransfersPublisher: .failing(),
-    saveFileTransfer: .failing(),
-    deleteFileTransfer: .failing(),
-    drop: .failing
+  static public let unimplemented = Database(
+    fetchChatInfos: .unimplemented(),
+    fetchChatInfosPublisher: .unimplemented(),
+    fetchContacts: .unimplemented(),
+    fetchContactsPublisher: .unimplemented(),
+    saveContact: .unimplemented(),
+    bulkUpdateContacts: .unimplemented(),
+    deleteContact: .unimplemented(),
+    fetchContactChatInfos: .unimplemented(),
+    fetchContactChatInfosPublisher: .unimplemented(),
+    fetchGroups: .unimplemented(),
+    fetchGroupsPublisher: .unimplemented(),
+    saveGroup: .unimplemented(),
+    deleteGroup: .unimplemented(),
+    fetchGroupChatInfos: .unimplemented(),
+    fetchGroupChatInfosPublisher: .unimplemented(),
+    fetchGroupInfos: .unimplemented(),
+    fetchGroupInfosPublisher: .unimplemented(),
+    saveGroupMember: .unimplemented(),
+    deleteGroupMember: .unimplemented(),
+    fetchMessages: .unimplemented(),
+    fetchMessagesPublisher: .unimplemented(),
+    saveMessage: .unimplemented(),
+    bulkUpdateMessages: .unimplemented(),
+    deleteMessage: .unimplemented(),
+    deleteMessages: .unimplemented(),
+    fetchFileTransfers: .unimplemented(),
+    fetchFileTransfersPublisher: .unimplemented(),
+    saveFileTransfer: .unimplemented(),
+    deleteFileTransfer: .unimplemented(),
+    drop: .unimplemented
   )
 }
 #endif
diff --git a/Sources/XXModels/Operations/BulkUpdate.swift b/Sources/XXModels/Operations/BulkUpdate.swift
index 6c9c28f4de91d1844d853cbc800defdd92e56e57..a814ed614cadf419e24668272149e398f4210463 100644
--- a/Sources/XXModels/Operations/BulkUpdate.swift
+++ b/Sources/XXModels/Operations/BulkUpdate.swift
@@ -22,9 +22,11 @@ public struct BulkUpdate<Query, Assignments> {
 }
 
 #if DEBUG
+import XCTestDynamicOverlay
+
 extension BulkUpdate {
-  public static func failing<Query, Assignments>() -> BulkUpdate<Query, Assignments> {
-    BulkUpdate<Query, Assignments> { _, _ in fatalError() }
+  public static func unimplemented<Query, Assignments>() -> BulkUpdate<Query, Assignments> {
+    BulkUpdate<Query, Assignments>(run: XCTUnimplemented("\(Self.self)"))
   }
 }
 #endif
diff --git a/Sources/XXModels/Operations/Delete.swift b/Sources/XXModels/Operations/Delete.swift
index b305699998ceb845a1492096a79496b65ca2bb52..fb6bcfed0e84a6368cb105b7b77bb0e20febbccf 100644
--- a/Sources/XXModels/Operations/Delete.swift
+++ b/Sources/XXModels/Operations/Delete.swift
@@ -22,9 +22,11 @@ public struct Delete<Model> {
 }
 
 #if DEBUG
+import XCTestDynamicOverlay
+
 extension Delete {
-  public static func failing<Model>() -> Delete<Model> {
-    Delete<Model> { _ in fatalError() }
+  public static func unimplemented<Model>() -> Delete<Model> {
+    Delete<Model>(run: XCTUnimplemented("\(Self.self)"))
   }
 }
 #endif
diff --git a/Sources/XXModels/Operations/DeleteMany.swift b/Sources/XXModels/Operations/DeleteMany.swift
index 43c155cbaab3c8a14b9e41dd780e12bcb12e1673..23e20cf351f56873537e115415e7d6bf4aa30ecb 100644
--- a/Sources/XXModels/Operations/DeleteMany.swift
+++ b/Sources/XXModels/Operations/DeleteMany.swift
@@ -21,9 +21,11 @@ public struct DeleteMany<Model, Query> {
 }
 
 #if DEBUG
+import XCTestDynamicOverlay
+
 extension DeleteMany {
-  public static func failing<Model, Query>() -> DeleteMany<Model, Query> {
-    DeleteMany<Model, Query> { _ in fatalError() }
+  public static func unimplemented<Model>() -> DeleteMany<Model, Query> {
+    DeleteMany<Model, Query>(run: XCTUnimplemented("\(Self.self)"))
   }
 }
 #endif
diff --git a/Sources/XXModels/Operations/Drop.swift b/Sources/XXModels/Operations/Drop.swift
index d80e2425413417c2d40461800e98854d63e1bb7a..1b7bd31cac48753f5f9f114c6c92226d35bce14e 100644
--- a/Sources/XXModels/Operations/Drop.swift
+++ b/Sources/XXModels/Operations/Drop.swift
@@ -20,7 +20,9 @@ public struct Drop {
 }
 
 #if DEBUG
+import XCTestDynamicOverlay
+
 extension Drop {
-  public static let failing = Drop { fatalError() }
+  public static let unimplemented = Drop(run: XCTUnimplemented("\(Self.self)"))
 }
 #endif
diff --git a/Sources/XXModels/Operations/Fetch.swift b/Sources/XXModels/Operations/Fetch.swift
index 7fe8e6e93891b126d3919d2550e4e0adfee80ca7..5f300f1d19657286e9f4e0949ad0fc5529547d20 100644
--- a/Sources/XXModels/Operations/Fetch.swift
+++ b/Sources/XXModels/Operations/Fetch.swift
@@ -22,9 +22,11 @@ public struct Fetch<Model, Query> {
 }
 
 #if DEBUG
+import XCTestDynamicOverlay
+
 extension Fetch {
-  public static func failing<Model, Query>() -> Fetch<Model, Query> {
-    Fetch<Model, Query> { _ in fatalError() }
+  public static func unimplemented<Model, Query>() -> Fetch<Model, Query> {
+    Fetch<Model, Query>(run: XCTUnimplemented("\(Self.self)"))
   }
 }
 #endif
diff --git a/Sources/XXModels/Operations/FetchPublisher.swift b/Sources/XXModels/Operations/FetchPublisher.swift
index fe78d3b5208fe088631796097dca0deea103799f..9758e025f238d4b244b0b25c5c1c7b91ef45cc8e 100644
--- a/Sources/XXModels/Operations/FetchPublisher.swift
+++ b/Sources/XXModels/Operations/FetchPublisher.swift
@@ -23,9 +23,13 @@ public struct FetchPublisher<Model, Query> {
 }
 
 #if DEBUG
+import XCTestDynamicOverlay
+
 extension FetchPublisher {
-  public static func failing<Model, Query>() -> FetchPublisher<Model, Query> {
-    FetchPublisher<Model, Query> { _ in fatalError() }
+  public static func unimplemented<Model, Query>() -> FetchPublisher<Model, Query> {
+    FetchPublisher<Model, Query>(
+      run: XCTUnimplemented("\(Self.self)", placeholder: Empty().eraseToAnyPublisher())
+    )
   }
 }
 #endif
diff --git a/Sources/XXModels/Operations/Save.swift b/Sources/XXModels/Operations/Save.swift
index 31ec662ba5cc4730a2e872f972d1b4b693037a42..abc6ab706135eace82159049a4955948f1317c7e 100644
--- a/Sources/XXModels/Operations/Save.swift
+++ b/Sources/XXModels/Operations/Save.swift
@@ -25,9 +25,11 @@ public struct Save<Model> {
 }
 
 #if DEBUG
+import XCTestDynamicOverlay
+
 extension Save {
-  public static func failing<Model>() -> Save<Model> {
-    Save<Model> { _ in fatalError() }
+  public static func unimplemented<Model>() -> Save<Model> {
+    Save<Model>(run: XCTUnimplemented("\(Self.self)"))
   }
 }
 #endif
diff --git a/Tests/XXLegacyDatabaseMigratorTests/MigratorTests.swift b/Tests/XXLegacyDatabaseMigratorTests/MigratorTests.swift
index 2a83537f4e496ccd355de9d39c550e6ab8498b66..68fcbf6f901d6b1e75b802ea2a636afa60c81ebe 100644
--- a/Tests/XXLegacyDatabaseMigratorTests/MigratorTests.swift
+++ b/Tests/XXLegacyDatabaseMigratorTests/MigratorTests.swift
@@ -36,7 +36,7 @@ final class MigratorTests: XCTestCase {
 
     var didSaveContacts = [XXModels.Contact]()
 
-    var newDb = XXModels.Database.failing
+    var newDb = XXModels.Database.unimplemented
     newDb.fetchContacts = .init { _ in [] }
     newDb.saveContact = .init(run: {
       didSaveContacts.append($0)
@@ -182,7 +182,7 @@ final class MigratorTests: XCTestCase {
 
     // Mock up new database:
 
-    var newDb = XXModels.Database.failing
+    var newDb = XXModels.Database.unimplemented
     newDb.fetchContacts = .init { _ in [] }
     newDb.saveContact = .init { $0 }