Unit testing on Android Studio: “not mocked” error

前端 未结 2 608
伪装坚强ぢ
伪装坚强ぢ 2021-02-13 09:17

I am new to Android Studio. I am using Android Studio 1.2 preview 2, gradle 2.2.1 and gradle plugin 1.1.0.

I cannot get around this error, when trying to run my unit te

相关标签:
2条回答
  • 2021-02-13 09:40

    I couldn't get Instrumentation tests to work, using Android Studio, I guess they're still finalising the implementation. And since it needs to run on the emulator, there are faster options: regular unit tests.

    Thanks to Jared's tips, I switched to Robolectric, which is easy to use on Android Studio.

    androidTestCompile 'junit:junit:4.12'
    androidTestCompile "org.robolectric:robolectric:3.0"
    

    and

    import org.junit.Before;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.robolectric.RuntimeEnvironment;
    import org.robolectric.RobolectricTestRunner;
    import static junit.framework.TestCase.assertEquals;
    
    @RunWith(RobolectricTestRunner.class)
    public class AppPreferencesTest {
    
        AppPreferences preferences;
    
        @Before
        public void setUp() throws Exception {
            preferences = new AppPreferences(RuntimeEnvironment.application.getApplicationContext());
        }
    
        @Test
        public void testIsNotificationsEnabled_Default() throws Exception {
            assertEquals(true, preferences.isNotificationsEnabled());
        }
    
        ...
    

    The info here seems to be correct at this time: http://nenick-android.blogspot.nl/2015/02/android-studio-110-beta-4-and.html But will probably deprecate again in the near future, as all the info I found on this subject using google deprecated already.

    0 讨论(0)
  • 2021-02-13 09:42

    I see you have updated your question.

    Please take a look at the source of this SharedPreferencesMockContext.java: https://github.com/applicake/Beandroid/blob/master/Beanstalk%20Android%20ClientTest/src/com/applicake/beanstalkclient/test/SharedPreferencesMockContext.java.

    Here is the test: https://github.com/applicake/Beandroid/blob/master/Beanstalk%20Android%20ClientTest/src/com/applicake/beanstalkclient/test/NotificationsTests.java

    Here is a snippet show how they created their Mock:

      @Override
      protected void setUp() throws Exception {
    
        final SharedPreferencesMockContext mockContext = new SharedPreferencesMockContext(getContext());
        MockApplication mockApplication = new MockApplication(){
          @Override
          public Context getApplicationContext() {
            Log.d("tests", "Im here");
            return mockContext;
          }
        };
    
    
        context = mockContext;
        setApplication(mockApplication);
        prefs = PreferenceManager.getDefaultSharedPreferences(context);
        prefs.edit().clear().commit();
    
        super.setUp();
      }
    

    I ran into this error last night. Try using "MockContext".

    public class AppPreferencesTest extends InstrumentationTestCase {
    
    AppPreferences preferences;
    Context context;
    
    @Before
    public void setUp() throws Exception {
        context = new MockContext();
        preferences = new AppPreferences(context);
    }
    

    Please see other examples here: https://stackoverflow.com/a/29063736/950427

    0 讨论(0)
提交回复
热议问题