diff --git a/tests/tests/class-plugin-functions.php b/tests/tests/class-plugin-functions.php
index e4cf636062a5b48f40afc9f8dfb55c96b19f73ec..506ddc7f537401501a497d71d571ac7e565c2a6b 100644
--- a/tests/tests/class-plugin-functions.php
+++ b/tests/tests/class-plugin-functions.php
@@ -49,18 +49,34 @@ class Plugin_Functions extends WP_UnitTestCase {
 
 	/**
 	 * Test whitelisted command validation
+	 *
+	 * @dataProvider whitelisted_command_provider
 	 */
-	function test_whitelist_using_validate_command() {
-		$this->assertTrue( is_string( WP_CLI_Cron_Control_Offload\validate_command( 'wp post list' ) ) );
-		$this->assertTrue( is_string( WP_CLI_Cron_Control_Offload\validate_command( 'post list' ) ) );
+	function test_whitelist_using_validate_command( $command ) {
+		$this->assertTrue( is_string( WP_CLI_Cron_Control_Offload\validate_command( $command ) ) );
+	}
+
+	function whitelisted_command_provider() {
+		return array(
+			array( 'wp post list' ),
+			array( 'post list' ),
+		);
 	}
 
 	/**
 	 * Test blacklisted command validation
+	 *
+	 * @dataProvider blacklisted_command_provider
 	 */
-	function test_blacklist_using_validate_command() {
-		$this->assertTrue( is_wp_error( WP_CLI_Cron_Control_Offload\validate_command( 'wp cli info' ) ) );
-		$this->assertTrue( is_wp_error( WP_CLI_Cron_Control_Offload\validate_command( 'cli info' ) ) );
+	function test_blacklist_using_validate_command( $command ) {
+		$this->assertWPError( WP_CLI_Cron_Control_Offload\validate_command( $command ) );
+	}
+
+	function blacklisted_command_provider() {
+		return array(
+			array( 'wp cli info' ),
+			array( 'cli info' ),
+		);
 	}
 
 	/**
@@ -71,36 +87,47 @@ class Plugin_Functions extends WP_UnitTestCase {
 		$this->assertTrue( is_int( WP_CLI_Cron_Control_Offload\schedule_cli_command( 'wp post list' ) ) );
 
 		// Should be blocked as a duplicate, thanks to Core's 10-minute lookahead.
-		$this->assertTrue( is_wp_error( WP_CLI_Cron_Control_Offload\schedule_cli_command( 'wp post list' ) ) );
+		$this->assertWPError( WP_CLI_Cron_Control_Offload\schedule_cli_command( 'wp post list' ) );
 
 		// Should also fail as normalization makes it a duplicate.
-		$this->assertTrue( is_wp_error( WP_CLI_Cron_Control_Offload\schedule_cli_command( 'post list' ) ) );
+		$this->assertWPError( WP_CLI_Cron_Control_Offload\schedule_cli_command( 'post list' ) );
 	}
 
 	/**
 	 * Test scheduling several of the same blocked event
+	 *
+	 * @dataProvider blocked_events_provider
 	 */
-	function test_blocked_event_scheduling() {
-		// Should fail, is a blocked event.
-		$this->assertTrue( is_wp_error( WP_CLI_Cron_Control_Offload\schedule_cli_command( 'wp cli info' ) ) );
-
-		// Should fail as a blocked event, would otherwise fail as a duplicate.
-		$this->assertTrue( is_wp_error( WP_CLI_Cron_Control_Offload\schedule_cli_command( 'wp cli info' ) ) );
+	function test_blocked_event_scheduling( $command ) {
+		$this->assertWPError( WP_CLI_Cron_Control_Offload\schedule_cli_command( $command ) );
+	}
 
-		// Should also fail as a blocked event, though normalization would also block it as a duplicate.
-		$this->assertTrue( is_wp_error( WP_CLI_Cron_Control_Offload\schedule_cli_command( 'cli info' ) ) );
+	function blocked_events_provider() {
+		return array(
+			array( 'wp cli info' ), // Should fail, is a blocked event.
+			array( 'wp cli info' ), // Should fail as a blocked event, would otherwise fail as a duplicate.
+			array( 'cli info'), // Should also fail as a blocked event, though normalization would also block it as a duplicate.
+		);
 	}
 
 	/**
 	 * Test each blocked bash operator
+	 *
+	 * @dataProvider invalid_bash_operators_provider
 	 */
-	function test_for_invalid_bash_operators() {
-		$this->assertTrue( is_wp_error( WP_CLI_Cron_Control_Offload\validate_command( 'post list & date' ) ) );
-		$this->assertTrue( is_wp_error( WP_CLI_Cron_Control_Offload\validate_command( 'post list | date' ) ) );
-		$this->assertTrue( is_wp_error( WP_CLI_Cron_Control_Offload\validate_command( 'post list > /tmp/nope' ) ) );
-		$this->assertTrue( is_wp_error( WP_CLI_Cron_Control_Offload\validate_command( 'post list 2> /tmp/nope' ) ) );
-		$this->assertTrue( is_wp_error( WP_CLI_Cron_Control_Offload\validate_command( 'post list 1>&2 /tmp/nope' ) ) );
-		$this->assertTrue( is_wp_error( WP_CLI_Cron_Control_Offload\validate_command( 'post list 2>&1 /tmp/nope' ) ) );
-		$this->assertTrue( is_wp_error( WP_CLI_Cron_Control_Offload\validate_command( 'post list &> /tmp/nope' ) ) );
+	function test_for_invalid_bash_operators( $command ) {
+		$this->assertWPError( WP_CLI_Cron_Control_Offload\validate_command( $command ) );
+	}
+
+	function invalid_bash_operators_provider() {
+		return array(
+			array( 'post list & date' ),
+			array( 'post list | date' ),
+			array( 'post list > /tmp/nope' ),
+			array( 'post list 2> /tmp/nope' ),
+			array( 'post list 1>&2 /tmp/nope' ),
+			array( 'post list 2>&1 /tmp/nope' ),
+			array( 'post list &> /tmp/nope' ),
+		);
 	}
 }