私はこのモッククラスを持っています:
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を使用できますか?
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());
}
}