### Question:
ParseUser extends ParseObject { public static ParseUser logIn(String username, String password) throws ParseException { return ParseTaskUtils.wait(logInInBackground(username, password)); } ParseUser(); static ParseQuery<ParseUser> getQuery(); boolean isAuthenticated(); @Override void remove(String key); String getSessionToken(); void setUsername(String username); String getUsername(); void setPassword(String password); void setEmail(String email); String getEmail(); boolean isNew(); @Override void put(String key, Object value); @SuppressWarnings("unchecked") @Override ParseUser fetch(); Task<Void> signUpInBackground(); void signUp(); void signUpInBackground(SignUpCallback callback); static Task<ParseUser> logInInBackground(String username, String password); static ParseUser logIn(String username, String password); static void logInInBackground(final String username, final String password,
      LogInCallback callback); static Task<ParseUser> becomeInBackground(String sessionToken); static ParseUser become(String sessionToken); static void becomeInBackground(final String sessionToken, LogInCallback callback); static ParseUser getCurrentUser(); static Task<Void> logOutInBackground(); static void logOutInBackground(LogOutCallback callback); static void logOut(); static Task<Void> requestPasswordResetInBackground(String email); static void requestPasswordReset(String email); static void requestPasswordResetInBackground(final String email,
      RequestPasswordResetCallback callback); @SuppressWarnings("unchecked") @Override ParseUser fetchIfNeeded(); static void registerAuthenticationCallback(
      String authType, AuthenticationCallback callback); static Task<ParseUser> logInWithInBackground(
      final String authType, final Map<String, String> authData); boolean isLinked(String authType); Task<Void> linkWithInBackground(
      String authType, Map<String, String> authData); Task<Void> unlinkFromInBackground(final String authType); static void enableAutomaticUser(); static Task<Void> enableRevocableSessionInBackground();  }### Answer:
@Test public void testLogIn() throws Exception { ParseCurrentUserController currentUserController = mock(ParseCurrentUserController.class); when(currentUserController.setAsync(any(ParseUser.class))) .thenReturn(Task.<Void>forResult(null)); ParseCorePlugins.getInstance().registerCurrentUserController(currentUserController); ParseUserController userController = mock(ParseUserController.class); ParseUser.State newUserState = new ParseUser.State.Builder() .put("newKey", "newValue") .sessionToken("newSessionToken") .build(); when(userController.logInAsync(anyString(), anyString())) .thenReturn(Task.forResult(newUserState)); ParseCorePlugins.getInstance().registerUserController(userController); ParseUser user = ParseUser.logIn("userName", "password"); verify(userController, times(1)).logInAsync("userName", "password"); verify(currentUserController, times(1)).setAsync(user); assertEquals("newSessionToken", user.getSessionToken()); assertEquals("newValue", user.get("newKey")); }