diff --git a/tests/phpunit/tests/l10n/getUserGender.php b/tests/phpunit/tests/l10n/getUserGender.php
new file mode 100644
index 0000000000..8a01d9facd
--- /dev/null
+++ b/tests/phpunit/tests/l10n/getUserGender.php
@@ -0,0 +1,130 @@
+<?php
+
+/**
+ * @group l10n
+ * @group i18n
+ */
+class Tests_Get_UserGender extends WP_UnitTestCase {
+	protected $user_id;
+
+	public function setUp() {
+		parent::setUp();
+
+		$this->user_id = $this->factory()->user->create(
+			array(
+				'role'   => 'administrator',
+				'gender' => 'female',
+			)
+		);
+
+		wp_set_current_user( $this->user_id );
+	}
+
+	public function tearDown() {
+		delete_user_meta( $this->user_id, 'gender' );
+		set_current_screen( 'front' );
+
+		parent::tearDown();
+	}
+
+	public function test_user_gender_property() {
+		set_current_screen( 'dashboard' );
+		$this->assertSame( 'female', get_user_gender() );
+		$this->assertSame( get_user_by( 'id', $this->user_id )->gender, get_user_gender() );
+	}
+
+	public function test_update_user_gender() {
+		set_current_screen( 'dashboard' );
+		update_user_meta( $this->user_id, 'gender', 'male' );
+		$this->assertSame( 'male', get_user_gender() );
+	}
+
+	public function test_returns_site_gender_if_empty() {
+		set_current_screen( 'dashboard' );
+		update_user_meta( $this->user_id, 'gender', '' );
+		$this->assertSame( 'unknown', get_user_gender() );
+	}
+
+	public function test_returns_site_gender_if_no_user() {
+		wp_set_current_user( 0 );
+		$this->assertSame( 'unknown', get_user_gender() );
+	}
+
+	public function test_returns_correct_user_gender() {
+		set_current_screen( 'dashboard' );
+		$this->assertSame( 'female', get_user_gender() );
+	}
+
+	public function test_returns_correct_user_gender_on_frontend() {
+		$this->assertSame( 'female', get_user_gender() );
+	}
+
+	/**
+	 * @group ms-required
+	 */
+	public function test_user_gender_is_same_across_network() {
+		if ( ! is_multisite() ) {
+			$this->markTestSkipped( __METHOD__ . ' requires multisite' );
+		}
+
+		$user_gender = get_user_gender();
+
+		switch_to_blog( self::factory()->blog->create() );
+		$user_gender_2 = get_user_gender();
+		restore_current_blog();
+
+		$this->assertSame( 'female', $user_gender );
+		$this->assertSame( $user_gender, $user_gender_2 );
+	}
+
+	public function test_user_id_argument_with_id() {
+		$user_id = $this->factory()->user->create(
+			array(
+				'gender' => 'male',
+			)
+		);
+
+		$user_gender1 = get_user_gender( $user_id );
+
+		delete_user_meta( $user_id, 'gender' );
+
+		$user_gender2 = get_user_gender( $user_id );
+
+		$this->assertSame( 'male', $user_gender1 );
+		$this->assertSame( 'unknown', $user_gender2 );
+	}
+
+	public function test_user_id_argument_with_wp_user_object() {
+		$user_id = $this->factory()->user->create(
+			array(
+				'gender' => 'male',
+			)
+		);
+
+		$user = get_user_by( 'id', $user_id );
+
+		$user_gender1 = get_user_gender( $user );
+
+		delete_user_meta( $user_id, 'gender' );
+
+		$user_gender2 = get_user_gender( $user );
+
+		$this->assertSame( 'male', $user_gender1 );
+		$this->assertSame( 'unknown', $user_gender2 );
+	}
+
+	public function test_user_id_argument_with_nonexistent_user() {
+		global $wpdb;
+
+		$user_id = $wpdb->get_var( "SELECT MAX(ID) FROM $wpdb->users" ) + 1;
+
+		$user_gender = get_user_gender( $user_id );
+
+		$this->assertSame( 'unknown', $user_gender );
+	}
+
+	public function test_user_id_argument_with_invalid_type() {
+		$user_gender = get_user_gender( 'string' );
+		$this->assertSame( 'unknown', $user_gender );
+	}
+}
