11
Ich habe gerade über Unit Instrumented Testing in Android lesen, und ich frage mich, wie ich ein SharedPreferences ohne SharedPreferencesHelper Klasse auf sie wie hereWie ein SharedPreferences verspotten Mockito mit
Mein Code spotten kann, ist:
public class Auth {
private static SharedPreferences loggedUserData = null;
public static String getValidToken(Context context)
{
initLoggedUserPreferences(context);
String token = loggedUserData.getString(Constants.USER_TOKEN,null);
return token;
}
public static String getLoggedUser(Context context)
{
initLoggedUserPreferences(context);
String user = loggedUserData.getString(Constants.LOGGED_USERNAME,null);
return user;
}
public static void setUserCredentials(Context context, String username, String token)
{
initLoggedUserPreferences(context);
loggedUserData.edit().putString(Constants.LOGGED_USERNAME, username).commit();
loggedUserData.edit().putString(Constants.USER_TOKEN,token).commit();
}
public static HashMap<String, String> setHeaders(String username, String password)
{
HashMap<String, String> headers = new HashMap<String, String>();
String auth = username + ":" + password;
String encoding = Base64.encodeToString(auth.getBytes(), Base64.DEFAULT);
headers.put("Authorization", "Basic " + encoding);
return headers;
}
public static void deleteToken(Context context)
{
initLoggedUserPreferences(context);
loggedUserData.edit().remove(Constants.LOGGED_USERNAME).commit();
loggedUserData.edit().remove(Constants.USER_TOKEN).commit();
}
public static HashMap<String, String> setHeadersWithToken(String token) {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Authorization","Token "+token);
return headers;
}
private static SharedPreferences initLoggedUserPreferences(Context context)
{
if(loggedUserData == null)
loggedUserData = context.getSharedPreferences(Constants.LOGGED_USER_PREFERENCES,0);
return loggedUserData;
}}
Ist es möglich, SharedPreferences zu spotten, ohne andere Klassen zu erstellen?
Ok, danke. Wie wäre es mit 'öffentlichen statischen void setUserCredentials (Kontext Kontext, String Benutzername, String Token)' Test? Ich möchte Benutzer-Credentials setzen, bevor 'testGetValidToken()' Ich nehme an, dass ich Mock für 'SharedPreferences.Editor' brauchen, aber wenn ich einige Schlüssel speichern, indem das verspotten sie von' SharedPreferences' Mock verfügbar sein wird? – adamura88
Ich würde einen 'Editor'-Mock zurückgeben, wenn' edit' aufgerufen wird. "wird durch SharedPreferences mock verfügbar sein?" Nein, ein Mock ist ein dummes Objekt –
Ihr Code weist Syntaxfehler auf. –