diff --git a/tracing-subscriber/src/registry/mod.rs b/tracing-subscriber/src/registry/mod.rs
index 807916644d..73786a1318 100644
--- a/tracing-subscriber/src/registry/mod.rs
+++ b/tracing-subscriber/src/registry/mod.rs
@@ -387,7 +387,7 @@ where
     }
 }
 
-#[cfg(test)]
+#[cfg(all(test, feature = "registry"))]
 mod tests {
     use crate::{
         prelude::*,
diff --git a/tracing-subscriber/src/subscribe.rs b/tracing-subscriber/src/subscribe.rs
index 255306c454..d2e0ce72de 100644
--- a/tracing-subscriber/src/subscribe.rs
+++ b/tracing-subscriber/src/subscribe.rs
@@ -1228,7 +1228,6 @@ impl Identity {
 
 #[cfg(test)]
 pub(crate) mod tests {
-    use std::sync::{Arc, Mutex};
 
     use super::*;
 
@@ -1354,7 +1353,9 @@ pub(crate) mod tests {
     }
 
     #[test]
+    #[cfg(feature = "registry")]
     fn context_event_span() {
+        use std::sync::{Arc, Mutex};
         let last_event_span = Arc::new(Mutex::new(None));
 
         struct RecordingSubscriber {
diff --git a/tracing-subscriber/tests/duplicate_spans.rs b/tracing-subscriber/tests/duplicate_spans.rs
index 92aee0eb61..173c9ac3ba 100644
--- a/tracing-subscriber/tests/duplicate_spans.rs
+++ b/tracing-subscriber/tests/duplicate_spans.rs
@@ -1,3 +1,4 @@
+#![cfg(all(feature = "env-filter", feature = "fmt"))]
 mod support;
 use tracing::{self, collect::with_default, Span};
 use tracing_subscriber::{filter::EnvFilter, fmt::Collector};
diff --git a/tracing-subscriber/tests/field_filter.rs b/tracing-subscriber/tests/field_filter.rs
index 6945594876..56ef889ee4 100644
--- a/tracing-subscriber/tests/field_filter.rs
+++ b/tracing-subscriber/tests/field_filter.rs
@@ -1,3 +1,4 @@
+#![cfg(feature = "env-filter")]
 mod support;
 use self::support::*;
 use tracing::{self, collect::with_default, Level};
diff --git a/tracing-subscriber/tests/filter.rs b/tracing-subscriber/tests/filter.rs
index 5d426c1231..f17a533a03 100644
--- a/tracing-subscriber/tests/filter.rs
+++ b/tracing-subscriber/tests/filter.rs
@@ -1,3 +1,5 @@
+#![cfg(feature = "env-filter")]
+
 mod support;
 use self::support::*;
 use tracing::{self, collect::with_default, Level};
diff --git a/tracing-subscriber/tests/filter_log.rs b/tracing-subscriber/tests/filter_log.rs
index 55e3f9bb05..083f02bc09 100644
--- a/tracing-subscriber/tests/filter_log.rs
+++ b/tracing-subscriber/tests/filter_log.rs
@@ -1,3 +1,4 @@
+#![cfg(all(feature = "env-filter", feature = "tracing-log"))]
 mod support;
 use self::support::*;
 use tracing::{self, Level};
diff --git a/tracing-subscriber/tests/fmt_max_level_hint.rs b/tracing-subscriber/tests/fmt_max_level_hint.rs
index 8af7b043ed..57a0f6e3f6 100644
--- a/tracing-subscriber/tests/fmt_max_level_hint.rs
+++ b/tracing-subscriber/tests/fmt_max_level_hint.rs
@@ -1,3 +1,4 @@
+#![cfg(feature = "fmt")]
 use tracing_subscriber::filter::LevelFilter;
 
 #[test]
diff --git a/tracing-subscriber/tests/registry_max_level_hint.rs b/tracing-subscriber/tests/registry_max_level_hint.rs
index 4a5ab49098..acba408b81 100644
--- a/tracing-subscriber/tests/registry_max_level_hint.rs
+++ b/tracing-subscriber/tests/registry_max_level_hint.rs
@@ -1,3 +1,4 @@
+#![cfg(all(feature = "registry", feature = "fmt"))]
 use tracing_subscriber::{filter::LevelFilter, prelude::*};
 
 #[test]
diff --git a/tracing-subscriber/tests/registry_with_subscriber.rs b/tracing-subscriber/tests/registry_with_subscriber.rs
index e9fee7d0a1..d24e243556 100644
--- a/tracing-subscriber/tests/registry_with_subscriber.rs
+++ b/tracing-subscriber/tests/registry_with_subscriber.rs
@@ -1,3 +1,4 @@
+#![cfg(feature = "registry")]
 use tracing_futures::{Instrument, WithCollector};
 use tracing_subscriber::prelude::*;
 
diff --git a/tracing-subscriber/tests/reload.rs b/tracing-subscriber/tests/reload.rs
index da2c05044f..ee133366dd 100644
--- a/tracing-subscriber/tests/reload.rs
+++ b/tracing-subscriber/tests/reload.rs
@@ -1,3 +1,4 @@
+#![cfg(feature = "reload")]
 use std::sync::atomic::{AtomicUsize, Ordering};
 use tracing_core::{
     collect::Interest,
diff --git a/tracing-subscriber/tests/reload_max_log_level.rs b/tracing-subscriber/tests/reload_max_log_level.rs
index 5b870a918b..1d485ce56a 100644
--- a/tracing-subscriber/tests/reload_max_log_level.rs
+++ b/tracing-subscriber/tests/reload_max_log_level.rs
@@ -1,3 +1,5 @@
+#![cfg(all(feature = "env-filter", feature = "tracing-log"))]
+
 mod support;
 use self::support::*;
 use tracing::{self, Level};
diff --git a/tracing-subscriber/tests/same_len_filters.rs b/tracing-subscriber/tests/same_len_filters.rs
index 5219785c6f..fc0d8175d0 100644
--- a/tracing-subscriber/tests/same_len_filters.rs
+++ b/tracing-subscriber/tests/same_len_filters.rs
@@ -1,6 +1,6 @@
 // These tests include field filters with no targets, so they have to go in a
 // separate file.
-
+#![cfg(feature = "env-filter")]
 mod support;
 use self::support::*;
 use tracing::{self, collect::with_default, Level};
diff --git a/tracing-subscriber/tests/utils.rs b/tracing-subscriber/tests/utils.rs
index 0d8e47b05e..c3deeb2852 100644
--- a/tracing-subscriber/tests/utils.rs
+++ b/tracing-subscriber/tests/utils.rs
@@ -19,6 +19,7 @@ fn init_ext_works() {
 }
 
 #[test]
+#[cfg(feature = "fmt")]
 fn builders_are_init_ext() {
     tracing_subscriber::fmt().set_default();
     let _ = tracing_subscriber::fmt()
@@ -28,6 +29,7 @@ fn builders_are_init_ext() {
 }
 
 #[test]
+#[cfg(all(feature = "fmt", feature = "env-filter"))]
 fn layered_is_init_ext() {
     tracing_subscriber::registry()
         .with(tracing_subscriber::fmt::subscriber())