Android Testing with Robolectric and Dagger

前端 未结 3 1039
一生所求
一生所求 2021-01-24 23:33

I am trying to write an Android application using Dagger. Trying to follow the TDD approach, I started writing a test for my First activity. For writing tests I am using Robole

3条回答
  •  灰色年华
    2021-01-25 00:23

    Seems like you're looking for module override (like Roboguice does). I couldn't find any, but in my tests, I've been using something like this:

    MyObjectTest.java
    
    @Test
    public void testMyObject() {
        ObjectGraph objectGraph = ObjectGraph.create(new TestModule());
        MyObject object = objectGraph.get(MyObject.class);
        assertNotNull(object);
        assertEquals("Received message from MyObjectTestImpl", object.getMessage());
    }
    
    TestModule.java
    
    public class TestModule {
        @Provides
        public Library provideMyObject() {
            return new MyObjectTestImpl();
        }
    }
    

    If MyObject is used in an Activity, I can also test it:

    @RunWith(RoboGradleTestRunner.class)
    public class RoboTest {
        @Test
        public void testTextView() {
            MainActivity activity = (MainActivity) Robolectric.buildActivity(MainActivity.class).create().get();
    
            assertEquals("Received message from MyObjectTestImpl", activity.getMyObject().getMessage());
        }
    }
    

提交回复
热议问题