web-dev-qa-db-ja.com

Android LiveDataのテスト

私はこのモッククラスを持っています:

class MockCategoriesRepository implements CategoriesRepository {
        @Override
        public LiveData<List<Category>> getAllCategories() {
            List<Category> categories = new ArrayList<>();
            categories.add(new Category());
            categories.add(new Category());
            categories.add(new Category());
            MutableLiveData<List<Category>> liveData = new MutableLiveData<>();
            liveData.setValue(categories);
            return liveData;
        }
    }

とテスト:

@Test
public void getAllCategories() {
    CategoriesRepository categoriesRepository = new MockCategoriesRepository();
    LiveData<List<Category>> allCategories = categoriesRepository.getAllCategories();
}

テストしたいList<Category>空の場合。

どうすればいいですか? Mockitoを使用できますか?

7
ip696

Mockitoなしで実行できます。テストに次の行を追加するだけです。

Assert.assertFalse(allCategories.getValue().isEmpty());

それを機能させるには、以下も追加する必要があります。

testImplementation "Android.Arch.core:core-testing:1.1.1"

あなたのapp/build.gradleファイルを作成し、テストクラスに以下を追加します。

@Rule
public TestRule rule = new InstantTaskExecutorRule();

デフォルトでは、LiveDataはAndroid依存関係(純粋なJVM環境では使用できません)からの独自のスレッドで動作するため、これが必要です。

したがって、テスト全体は次のようになります。

public class ExampleUnitTest {

    @Rule
    public TestRule rule = new InstantTaskExecutorRule();

    @Test
    public void getAllCategories() {
        CategoriesRepository categoriesRepository = new MockCategoriesRepository();
        LiveData<List<Category>> allCategories = categoriesRepository.getAllCategories();

        Assert.assertFalse(allCategories.getValue().isEmpty());
    }
}