Общие настройки в mockito пустые - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь смоделировать простые общие настройки, используя Mockito.Поскольку примеры в Google слишком сложны, чтобы что-то из них сделать, я решил пойти дальше самостоятельно.Общие настройки настраиваются с помощью кинжала.Сбой с NPE в методе saveString в классе SharedPreferenceManager в строке putString.

@Module
public class StudentModule {
    @Provides
    @Singleton
    static Context getContext(Application application) {
        return application.getApplicationContext();
    }

    @Provides
    @Singleton
    static SharedPreferences getSharedPreferences(Context context) {
        return PreferenceManager.getDefaultSharedPreferences(context);
    }
}

Существует класс менеджера:

public class SharedPreferenceManager {
    private SharedPreferences sharedPreferences;
    private Context context;
    @Inject public SharedPreferenceManager(SharedPreferences sharedPreferences, Context context){
        this.sharedPreferences=sharedPreferences;
        this.context=context;
    }
    public String doSomething(){

        return sharedPreferences.getString("s","");
    }
    public void saveString(String s){
        System.out.println(sharedPreferences.getClass().getSimpleName());
        SharedPreferences.Editor editor=sharedPreferences.edit();
        editor.putString("s","bis").apply();

    }
}

Вот тест:

@RunWith(MockitoJUnitRunner.class)

public class MockTest {
    @InjectMocks
    SharedPreferenceManager sharedPreferenceManager;
    @Mock SharedPreferences sharedPreferences;


    @Before
    public void setup() {
        MockitoAnnotations.initMocks(this);



    }
    @Test
    public void isSharedPefWorking(){
        sharedPreferenceManager.saveString("bis");
        assertEquals("bis",sharedPreferenceManager.doSomething());

    }

}

1 Ответ

0 голосов
/ 14 сентября 2018

SharedPreferences использует SharedPreferences.Editor, над которым вы сейчас не издеваетесь.

Вам нужно сделать что-то вроде следующего, чтобы высмеивать и проверять поведение вашего SharedPreferenceManager.

@RunWith(MockitoJUnitRunner.class)
public class MockTest {
    @InjectMocks
    SharedPreferenceManager sharedPreferenceManager;
    @Mock
    SharedPreferences sharedPreferences;
    @Mock
    SharedPreferences.Editor sharedPreferencesEditor;

    final String savedString = "savedString";

    @Before
    public void setup() {
        MockitoAnnotations.initMocks(this);
        when(sharedPreferences.edit()).thenReturn(sharedPreferencesEditor);
        when(sharedPreferencesEditor.putString(anyString(), anyString())).thenReturn(sharedPreferencesEditor);
    }

    @Test
    public void saveString() {
        sharedPreferenceManager.saveString(savedString);
        verify(sharedPreferencesEditor).putString("s", savedString);
    }

    @Test
    public void getString() {
        when(sharedPreferences.getString("s","")).thenReturn(savedString);

        String preferenceString = sharedPreferenceManager.doSomething();

        assertEquals(preferenceString, savedString);
    }

}
...