【发布时间】:2019-05-19 15:32:54
【问题描述】:
您好,我正在尝试开发一个单元测试,为了从 api 获取数据以执行此操作,我有以下内容:
@RunWith(RobolectricTestRunner.class)
public class RouteTest {
LoginRepository profileRepository = new LoginRepository(RuntimeEnvironment.application);
MapRepository mapRepository = new MapRepository(RuntimeEnvironment.application);
private ActivityController<LoginActivity> loginController;
private ActivityController<MapActivity> mapController;
private LoginActivity loginActivity;
private MapActivity mapActivity;
private void createActivitiesWithIntents() {
loginActivity = loginController.create().start().get();
mapActivity = mapController.create().start().get();
}
@Before
public void setUp() {
loginController = Robolectric.buildActivity(LoginActivity.class);
mapController = Robolectric.buildActivity(MapActivity.class);
}
@Test
public void testCalculateRoute() {
System.out.println("Start Test");
MutableLiveData<ApiResponseWithDataList<LoginData>> loginData = new MutableLiveData<>();
MutableLiveData<ApiResponseWithData<ItineraryResponseData>> itineraryData = new MutableLiveData<>();
profileRepository.login(loginData, EMAIL, PASS);
createActivitiesWithIntents();
loginData.observe(loginActivity, (@Nullable ApiResponseWithDataList<LoginData> loginResponse) -> {
System.out.println("Do login for get Access Token");
String accessToekn = loginResponse.getData().getAccessToken();
ItineraryBody itineraryBody = new ItineraryBody();
mapRepository.calculateRoute(itineraryData, accessToekn, itineraryBody);
});
itineraryData.observe(mapActivity, (@Nullable ApiResponseWithData<ItineraryResponseData> itineraryResponse) -> {
System.out.println("Getting route");
System.out.println("Finish Test");
});
}
}
当执行这个测试时,我得到下一个输出
开始测试
登录以获取访问令牌
那么测试从不等待 itineraryData.observe,知道如何让测试等待 itineraryData 中的响应吗?
谢谢
【问题讨论】:
标签: android junit retrofit2 robolectric