【发布时间】:2017-05-19 09:15:56
【问题描述】:
我已尝试通过https://medium.com/upday-devs/android-architecture-patterns-part-3-model-view-viewmodel-e7eeee76b73b 进行单元测试。 为什么 Testsubscriber 给出 ListModel 结果的 List 而不是 ListModel ?
我的测试
public class MainViewModelTest {
@Mock
private IDataModel mDataModel;
private MainViewModel mMainViewModel;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
}
@After
public void tearDown() throws Exception {
}
@Test
public void testGetSupportedLanguages_emitsCorrectLanguages() {
Language de = new Language("German", LanguageCode.DE);
Language en = new Language("English", LanguageCode.EN);
List<Language> languages = Arrays.asList(de, en);
Observable<List<Language>> mockObservable = Observable.just(languages);
doReturn(mockObservable).when(mDataModel).getObservableSupportedLanguages();
Language hr = new Language("Slovakian", LanguageCode.HR);
List<Language> expectedLanguages = Arrays.asList(de, en, hr);
mMainViewModel = new MainViewModel(mDataModel, new ImmediateSchedulerProvider());
TestSubscriber<List<Language>> testSubscriber = new TestSubscriber<>();
mMainViewModel.getObservableSupportedLanguages().subscribe(testSubscriber);
testSubscriber.assertNoErrors();
testSubscriber.assertReceivedOnNext(expectedLanguages); //here i get List<List<Language>> instead of one List<Language>
}
}
在 MainViewModel 中
@NonNull
public Observable<List<Language>> getObservableSupportedLanguages() {
return mDataModel.getObservableSupportedLanguages();
}
在数据模型中
@NonNull
@Override
public Observable<List<Language>> getObservableSupportedLanguages() {
return Observable.fromCallable(this::getLanguages);
}
@NonNull
private List<Language> getLanguages() {
return Arrays
.asList(new Language("English", LanguageCode.EN),
new Language("German", LanguageCode.DE),
new Language("Slovakian", LanguageCode.HR));
}
【问题讨论】:
标签: android unit-testing observable rx-android