diff --git tests/phpunit/tests/post/nav-menu.php tests/phpunit/tests/post/nav-menu.php
index 693f1fb..c0a2968 100644
--- tests/phpunit/tests/post/nav-menu.php
+++ tests/phpunit/tests/post/nav-menu.php
@@ -275,4 +275,45 @@ class Test_Nav_Menus extends WP_UnitTestCase {
 
 		$this->assertEmpty( $post_type_archive_item->description );
 	}
+
+	/**
+	 * Confirm Walker_Nav_Menu is passed a $args object.
+	 *
+	 * Walker_Nav_Menu is unique in that it uses an $args object rather than an array.
+	 * This has been the case for some time and should be maintained for reasons of
+	 * backward compatibility.
+	 *
+	 * @ticket 24587
+	 */
+	function test_walker_nav_menu_is_passed_args_object() {
+		$tag_id = self::factory()->tag->create();
+
+		$tag_insert = wp_update_nav_menu_item( $this->menu_id, 0, array(
+			'menu-item-type' => 'taxonomy',
+			'menu-item-object' => 'post_tag',
+			'menu-item-object-id' => $tag_id,
+			'menu-item-status' => 'publish',
+		) );
+
+		/*
+		 * The tests take place in a filter to ensure the passed
+		 * arguments is an object.
+		 */
+		add_filter( 'nav_menu_item_args', array( $this, '_confirm_nav_menu_item_args_object' ) );
+
+		$actual = wp_nav_menu(  array(
+			'echo' => false,
+			'menu' => $this->menu_id,
+		) );
+
+		wp_delete_term( $tag_id, 'post_tag' );
+	}
+
+	/**
+	 * Run tests required to confrim Walker_Nav_Menu receives an $args object.
+	 */
+	function _confirm_nav_menu_item_args_object( $args ) {
+		$this->assertTrue( is_object( $args ) );
+		return $args;
+	}
 }
